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 contains: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;
}
太困惑了。 谢谢你的帮助。
答案 0 :(得分:2)
根据编写代码的方式,该输出对我来说是正确的。您正在复制相同的向量。您正在从[开始,开始+5](10 20 30 40 50)进行复制,并且您要复制到[结束,结束5]。所以10 20 30 [10 20 30 40 50]是该代码的正确输出。前3个元素未受影响。
答案 1 :(得分:1)
如果要向后复制某些内容,请使用反向迭代器:rbegin()
和rend()
。然后只使用常规std::copy
。