繁体   English   中英

C ++ STL copy_backward问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM