【发布时间】:2020-07-16 17:54:26
【问题描述】:
我尝试将输入行复制到多个向量中:
#include <vector>
#include <sstream>
#include <istream>
#include <iterator>
#include <algorithm>
#include <iostream>
int main(){
std::vector<int> v1, v2, v3;
std::istringstream is ("1 2 3 4 5 6");
std::istream_iterator<int> iit (is);
std::copy_n(iit, 2, std::back_inserter(v1));
std::copy_n(iit, 2, std::back_inserter(v2));
std::copy(iit, std::istream_iterator<int>(), std::back_inserter(v3));
std::ostream_iterator<int> oit(std::cout, ", ");
std::copy(v1.begin(),v1.end(), oit);
std::cout << "\n";
std::copy(v2.begin(),v2.end(), oit);
std::cout << "\n";
std::copy(v3.begin(),v3.end(), oit);
std::cout << "\n";
return 0;
}
我假设这个 porgram 输出:
1, 2,
3, 4,
5, 6,
但我明白了:
1, 2,
1, 3,
1, 4, 5, 6,
为什么copy_n总是在向量的开头插入1?
【问题讨论】:
-
如果您阅读了the first sentence of
std::istream_iterator's description,请结合显示的代码将迭代器按值传递给std::copy_n和@ 987654327@ 修改了迭代器,然后显示的代码尝试使用相同的迭代器的原始值,您可以从中得出什么结论? -
@SamVarshavchik 您说的是:“在构造迭代器时读取第一个对象”?所以我可能每次使用副本时都必须创建一个新的 istream_iterator?
标签: c++ algorithm istream-iterator