gpt4 book ai didi

c++ - vector 迭代器不可取消引用(尝试手动反转 vector )

转载 作者:行者123 更新时间:2023-11-30 01:06:04 25 4
gpt4 key购买 nike

我正在尝试创建一个接受 vector 并简单地(手动)反转的函数。我知道 reverse() 的存在,但我遇到了“Vector iterator not dereferencable”问题,出于教育目的,我想知道它是什么意思。我试着研究这个问题,有人(在这个论坛上)说 vect.end() 根据定义是不可取消引用的,但根据我的理解,使用 reverse_iterator 只是颠倒了两端,所以遵循逻辑; vect.rend 不应取消引用。

vector<int> reverseVector(vector<int>);

int main()
{
vector<int> vec;

for (int i = 0; i < 11; i++)
{
vec.push_back(i);
}

vec = reverseVector(vec);

for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++)
{
cout << *it << " ";
}
cout << endl;

return 0;
}

vector<int> reverseVector(vector<int> vect)
{
vector<int>::reverse_iterator ritr;
for (ritr = vect.rbegin(); ritr != vect.rend(); ritr++)
{
vect.insert(vect.begin(), *ritr);
vect.pop_back();
}
return vect;
}

最佳答案

您正在从 vector 中删除元素(从后面弹出),这会使反向迭代器无效


您可以遍历一半的 vector 并交换元素,就像这样:

void swap(int& a, int& b) {
int tmp = a;
a = b;
b = tmp;
}

vector<int> reverseVector(vector<int> vect) {
const size_t origin_size = vect.size();
for(size_t i = 0; i < origin_size/2; ++i)
swap(vect[i], vect[origin_size - 1 - i]);
return vect;
}

关于c++ - vector 迭代器不可取消引用(尝试手动反转 vector ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47111952/

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