c++ - 如何将流cin加载到 vector 中

标签 c++

我想从 cin 加载一个包含整数的 vector 。以下代码有效:

std::istream_iterator< int > iterBegin( std::cin ), iterEnd;
vector< int > v( iterBegin, iterEnd );

但是,当我尝试更简洁地编写它时,它失败了:

vector< int > v(std::istream_iterator< int >(std::cin), 
                std::istream_iterator< int >() );

有什么想法吗?

最佳答案

正如 IgorTandetnik 所指出的,您遇到了 C++ 最令人烦恼的解析。解决方案(如果您的编译器理解 C++11)是使用统一的初始化语法。

clang 有一个即使在 C++98 中也能工作的建议:

cin-vec.cc:7:21: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]
std::vector< int > v(std::istream_iterator< int >(std::cin),
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cin-vec.cc:7:22: note: add a pair of parentheses to declare a variable
std::vector< int > v(std::istream_iterator< int >(std::cin),
                     ^
                     (                                     )
cin-vec.cc:12:19: error: member reference base type 'std::vector<int> (std::istream_iterator<int>, std::istream_iterator<int> (*)())' is not a structure or union
    std::cout << v.size();
                 ~^~~~~

即将您的代码更改为:

std::vector< int > v((std::istream_iterator< int >(std::cin)),
                std::istream_iterator< int >() );

关于c++ - 如何将流cin加载到 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835425/

相关文章:

c++ - 程序流程并以安全和 Eloquent 方式正确地将控制权返回给 main()

c++ - void 和 C++ 中其他不完整类型的主要区别是什么?

c++ - 如何在C++中获取空格之前和空格之后的值

c++ - 确定 DLL 的符号名称

c++ - 使用任意键停止程序(c++)

c++:如何将整数添加到字符串

c++ - 为什么构造函数调用构造函数会产生奇怪的结果?

c++ - 在单元测试时操作迭代器

c++ - 在 C++ 中使用 if/else 语句验证输入值

c++ - 为什么此算法的这个 "improvement"不起作用?