我开始学习更多关于矢量的知识。我被告知要做的第一个练习练习之一是使用'迭代器格式'输出数组的内容。作为一项额外的练习,我被告知尝试使用与指针算法类似的相同方法反向打印数组。
#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;
}
}
输出如下:
-820575969
4
3
2
1
程序正在运行,它以相反的顺序打印出数组中的数字。然而,为什么第一件事输出了一些长的负数?谢谢你的帮助。
R, 约翰
答案 0 :(得分:6)
向量的end迭代器不引用有效数据。有效数据来自[begin, end)
(半封闭和半封闭范围)。因此,您无法期望其上的*
运算符能够正常运行。事实上,这样做是不明确的行为。
相反,要向后迭代,请使用reverse_iterators arr.rbegin()
和arr.rend()
并使用++
运算符:
for(std::vector<int>::reverse_iterator it = arr.rbegin(); it != arr.rend(); ++it)