c ++ STL copy_backward вопрос - PullRequest
       5

c ++ STL copy_backward вопрос

1 голос
/ 03 августа 2011
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;
}

Так растерялся. спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Этот вывод выглядит правильно для меня в зависимости от способа написания кода.Вы копируете из одного и того же вектора.Вы копируете из [начало, начало +5] (10 20 30 40 50) и копируете в [конец, конец-5].Таким образом, 10 20 30 [10 20 30 40 50] - правильный вывод для этого кода.Первые 3 элемента нетронуты.

1 голос
/ 03 августа 2011

Если вы хотите скопировать что-то в обратном направлении, используйте обратные итераторы: rbegin() и rend() Тогда просто используйте обычный std::copy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...