gpt4 book ai didi

C++ STL copy_backward问题

转载 作者:行者123 更新时间:2023-11-30 03:06:08 24 4
gpt4 key购买 nike

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

好迷茫。感谢您的帮助。

最佳答案

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

关于C++ STL copy_backward问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com