我正在尝试创建一个函数,它接受一个向量并简单地反转(手动)。我知道 reverse() 的存在,但我遇到了“向量迭代器不可解引用”的问题,出于教育目的,我想知道这意味着什么。我试着研究这个问题,有人(在这个论坛上)说 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;
}
您正在从向量中删除元素(从后面弹出),这会使反向迭代器无效。
您可以遍历向量的一半并交换元素,例如:
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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句