

cinを使って改行が行われるまで整数値 aに入力させてその値を`vector<int> in`にいれるにはどうすればいいですか？


CC BY-SA 3.0
2015-11-23T14:32:13.793
19214
2015-11-23T17:55:46.513
13140
question
c++
C++の改行についてです


こんな感じでどうでしょうか。

[code]

    #include <locale>
    #include <iostream>
    #include <sstream>
    #include <vector>
    
    struct word_separator : std::ctype<char> {
      word_separator() : std::ctype<char>(get_table()) {}
      static mask const* get_table() {
        static mask rc[table_size];
        rc[' '] = std::ctype_base::space;
        rc['\n'] = std::ctype_base::space;
        return &rc[0];
      }
    };
    
    int
    main() {
      std::cin.imbue(std::locale(std::cin.getloc(), new word_separator));
      std::string word;
      std::vector<int> in;
      int a;
      while (std::cin >> word) {
        std::istringstream ss(word);
        ss >> a;
        if (ss.fail()) {
          std::cerr << "invalid token: " << word << std::endl;
        } else {
          in.push_back(a);
        }
      }
    }
    
[/code]


CC BY-SA 3.0
2015-11-23T15:53:45.993
19217
2015-11-23T17:55:46.513
2015-11-23T17:55:46.513
440
440
19214
answer


「改行が行われるまで整数値aに入力させて」の下りが良くわからないのですが、最初の改行までの間に含まれている空白で区切られた複数の数値を入力する、と言う意味であれば、こんな感じではどうでしょうか。

[code]

    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    
    int main()
    {
      std::vector<int> in;
      std::string line;
      if (std::getline(std::cin, line)) {
        std::istringstream ss(line);
        std::copy(std::istream_iterator<int>(ss), std::istream_iterator<int>(), std::back_inserter(in));
      }
    
      // 入力された内容を表示
      std::copy(in.begin(), in.end(), std::ostream_iterator<int>(std::cout, " "));
    }
    
[/code]

あるいは、どうしても変数 a を使いたければ、

[code]

    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    
    int main()
    {
      std::vector<int> in;
      std::string line;
      if (std::getline(std::cin, line)) {
        std::istringstream ss(line);
        int a;
        while (ss >> a) {
          in.push_back(a);
        }
      }
    
      // 入力された内容を表示
      std::copy(in.begin(), in.end(), std::ostream_iterator<int>(std::cout, " "));
    }
    
[/code]


CC BY-SA 3.0
2015-11-23T17:11:13.560
19219
2015-11-23T17:11:13.560
7890
19214
answer