向量数组的反向输出给出了奇怪的结果

Joh*_*sco 0 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_back(4);

 for(vector<int>::iterator it = arr.end(); it >= arr.begin(); it--){
 cout << *it << endl;
 }
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

-820575969
4
3
2
1
Run Code Online (Sandbox Code Playgroud)

该程序正在运行,它以相反的顺序打印出数组中的数字.然而,为什么第一件事输出了一些长的负数?谢谢你的帮助.

约翰

MFi*_*KDX 6

向量的结束迭代器不引用有效数据.有效数据来自[begin, end)(半闭和半开).所以你不能指望*操作员在它上面工作.事实上,这样做是未定义的行为.

相反,向后遍历,使用reverse_iterators arr.rbegin()arr.rend(),并使用++运营商像这样:

for(std::vector<int>::reverse_iterator it = arr.rbegin(); it != arr.rend(); ++it)
Run Code Online (Sandbox Code Playgroud)