用C++直接输入到向量中

kol*_*vra 5 c++ iostream stl vector

请考虑以下代码段:

...
int N,var;
vector<int> nums;
cin >> N;
while (N--)
{
   cin >> var;
   nums.push_back(var);
}
...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,是否可以在不使用辅助变量的情况下执行此操作var

Die*_*lla 11

假设你已经阅读了初始版本N,有一个很好的技巧istream_iterator:

std::vector<int> nums;
nums.reserve(N);
std::copy(std::istream_iterator<int>(std::cin), 
          std::istream_iterator<int>(),
          std::back_inserter(nums));
Run Code Online (Sandbox Code Playgroud)

back_inserter对象将自身转换为迭代器,在末尾向向量添加元素.迭代器流可以通过读取的元素的类型进行参数化,如果没有给出参数,则表示输入的结束.

  • 这不是一个技巧,这就是`istream_iterator'和输入迭代器的概念. (2认同)
  • 此代码无效.使用默认值为0的`N`元素初始化向量,然后使用`push_back()`超出`N`元素. (2认同)