[英]c++ STL copy_backward question
int main () {
vector<int> myvector;
vector<int>::iterator it;
// set some values:
for (int i=1; i<=5; i++)
myvector.push_back(i*10); // myvector: 10 20 30 40 50
myvector.resize(myvector.size()+3); // allocate space for 3 more elements
copy_backward ( myvector.begin(), myvector.begin()+5, myvector.end() );
cout << "myvector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
为什么输出为“ myvector包含:10 20 30 10 20 30 40 50”
为什么不“ 30 40 50 10 20 30 40 50”
copy_backward的实现在这里:
template<class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward ( BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result )
{
while (last!=first) *(--result) = *(--last);
return result;
}
如此迷茫。 谢谢你的帮助。
根据代码的编写方式,该输出对我而言似乎正确。 您正在复制相同的向量。 您正在从[begin,begin +5]开始复制(10 20 30 40 50),然后复制到[end,end-5]。 因此10 20 30 [10 20 30 40 50]是该代码的正确输出。 前三个元素保持不变。
如果要向后复制某些内容,请使用反向迭代器: rbegin()
和rend()
。 然后只需使用常规的std::copy
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.