【问题标题】:c++ STL copy_backward questionc++ STL copy_backward 问题
【发布时间】:2011-08-02 21:57:25
【问题描述】:
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;
}

好困惑。 感谢您的所有帮助。

【问题讨论】:

标签: c++ stl


【解决方案1】:

根据代码的编写方式,该输出在我看来是正确的。您正在从和复制到同一个向量。您从 [begin, begin +5] (10 20 30 40 50) 复制到 [end, end-5]。所以 10 20 30 [10 20 30 40 50] 是该代码的正确输出。前 3 个元素保持不变。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不确定这有什么帮助。公平地说,我不确定 OP 到底想要什么。 “新”前三个元素的数据来自哪里?
    猜你喜欢
    • 2011-06-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多