C++ STL copy_backward вопрос
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 ответа
Решение
Этот вывод выглядит правильно для меня в зависимости от способа написания кода. Вы копируете из одного и того же вектора. Вы копируете из [начало, начало +5] (10 20 30 40 50) и копируете в [конец, конец-5]. Таким образом, 10 20 30 [10 20 30 40 50] - правильный выход для этого кода. Первые 3 элемента нетронуты.
Если вы хотите скопировать что-то в обратном направлении, используйте обратные итераторы: rbegin()
а также rend()
, Тогда просто используйте обычный std::copy
,