c ++ STL copy_backward问题

时间:2011-08-02 21:57:25

标签: c++ stl

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;
}

太困惑了。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

根据编写代码的方式,该输出对我来说是正确的。您正在复制相同的向量。您正在从[开始,开始+5](10 20 30 40 50)进行复制,并且您要复制到[结束,结束5]。所以10 20 30 [10 20 30 40 50]是该代码的正确输出。前3个元素未受影响。

答案 1 :(得分:1)

如果要向后复制某些内容,请使用反向迭代器:rbegin()rend()。然后只使用常规std::copy