C++11 为什么std::copy\n不能在每次调用之间连续复制
我找到了std::copy\n,行为如下:C++11 为什么std::copy\n不能在每次调用之间连续复制,c++11,iterator,copy,C++11,Iterator,Copy,我找到了std::copy\n,行为如下: stringstream ss; ss.str("abcdefghij"); string str; str.resize(10); std::copy_n(istreambuf_iterator<char>(ss), 5, str.begin()); cout << str << endl; std::copy_n(istreambuf_iterator<char>(ss), 5, str.begin(
stringstream ss;
ss.str("abcdefghij");
string str;
str.resize(10);
std::copy_n(istreambuf_iterator<char>(ss), 5, str.begin());
cout << str << endl;
std::copy_n(istreambuf_iterator<char>(ss), 5, str.begin());
cout << str << endl;
stringstreamss;
ss.str(“abcdefghij”);
字符串str;
str.resize(10);
std::copy_n(istreambuf_迭代器(ss),5,str.begin());
cout显示的带有给定参数的std::copy\n
用法应该会产生一个输出
abcde
efghi
为了解释上述情况
std::copy_n(istreambuf_iterator<char>(ss), 5, str.begin());
将从'e'
开始的5个字符复制到str
的开头str
现在是“efghi”
后跟5个空字节
如果不是,而是输出
abcde
abcdefghij
如果需要,您可以将std::copy\n
的第二次调用更改为
std::copy_n(std::next(istreambuf_iterator<char>(ss)), 5, str.begin() + 5);
std::copy_n(std::next(istreambuf_迭代器(ss)),5,str.begin()+5);
它将从
'f'
开始的5个字符复制到str
,从str
的第一个空字节开始。让我感到奇怪的是,在第一次复制操作后,ss
不会指向f
?如果ss
在开始时指向'a'
,为什么在五次读取操作后它不指向'f'
?在两次copy
操作后,我们不应该得到abcde
和fghij
吗?我同意这种行为不是绝对明显的。但是通过这种方式,std::copy\u n
只执行它对输入迭代器绝对需要执行的操作:从中读取n
次,增加n-1
次。可能是有人想重用上次复制的元素—从文件读取时,n
增量(而不是n-1
)使最后一个字符无法访问。
std::copy_n(std::next(istreambuf_iterator<char>(ss)), 5, str.begin() + 5);