C++ 向量数组的反向输出,产生奇怪的结果
我从学习向量开始。我被告知要做的第一个练习之一是使用“迭代器格式”输出数组的内容。作为一个额外的练习,我被告知尝试使用与指针算法类似的方法反向打印数组C++ 向量数组的反向输出,产生奇怪的结果,c++,C++,我从学习向量开始。我被告知要做的第一个练习之一是使用“迭代器格式”输出数组的内容。作为一个额外的练习,我被告知尝试使用与指针算法类似的方法反向打印数组 #include <iostream> #include <vector> using namespace std; int main(){ vector<int> arr; arr.push_back(1); arr.push_back(2); arr.push_back(3); arr.push_
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> arr;
arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
arr.push_back(4);
for(vector<int>::iterator it = arr.end(); it >= arr.begin(); it--){
cout << *it << endl;
}
}
程序正在工作,它正在以相反的顺序打印数组中的数字。然而,为什么第一件事是输出一些长的负数?谢谢你的帮助
R,
John向量的迭代器未引用有效数据。有效数据来自[begin,end)
(半封闭半开放范围)。因此,您不能期望其上的*
运算符工作。事实上,这样做是未定义的行为
相反,要向后迭代,请使用arr.rbegin()
和arr.rend()
并使用+
运算符:
for(std::vector<int>::reverse_iterator it = arr.rbegin(); it != arr.rend(); ++it)
for(std::vector::reverse_迭代器it=arr.rbegin();it!=arr.rend();+it)
向量的迭代器不引用有效数据。有效数据来自[begin,end)
(半封闭半开放范围)。因此,不能指望它上面的*
运算符工作。事实上,这样做是未定义的行为
相反,要向后迭代,请使用arr.rbegin()
和arr.rend()
并使用+
运算符:
for(std::vector<int>::reverse_iterator it = arr.rbegin(); it != arr.rend(); ++it)
for(std::vector::reverse_迭代器it=arr.rbegin();it!=arr.rend();+it)
你应该使用rbegin()
和rend()
。你应该使用rbegin()
和rend()
。我明白了。非常感谢你的帮助。你说的“半封闭半开放范围”是什么意思?@499602D2,我在用我明白了。非常感谢你的帮助。你说的“半封闭半开放范围”是什么意思?@499602D2,我正在使用