c++ - vector 数组的反向输出给出奇怪的结果

标签 c++

我开始学习更多关于 vector 的知识。我被告知要做的第一个练习是使用“迭代器格式”输出数组的内容。作为一项额外的练习,我被告知尝试使用类似于指针算法的相同方法反向打印数组。

#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, 约翰

最佳答案

end vector 的迭代器未引用有效数据。有效数据来自[begin, end)(半闭半开区间)。所以你不能指望 * 运算符能正常工作。事实上,这样做是未定义的行为。

相反,要向后迭代,请使用 reverse_iterators arr.rbegin()arr.rend() 并使用 ++ 运算符:

for(std::vector<int>::reverse_iterator it = arr.rbegin(); it != arr.rend(); ++it)

关于c++ - vector 数组的反向输出给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49910561/

相关文章:

C++ 和 DirectX 9 - 调用 D3DXLoadMeshFromX 时出现解析错误

c++ - 广义 lambda 的 vector

c++ - Allegro 4.2.3使用Visual C++ 2010 Express创建静态/发布版本以在其他Windows计算机上运行

c# - 如何在 Windows Mobile 6.5 上终止进程

c++ - 使用 STK 和 FMVoices 类的内存访问错误

c++ - 窗口 api 大小和移动控制台

直接使用流缓冲区时出现 C++ 错误? : operator

C++ 编译错误只有一个候选函数

c++ - 正则表达式多个浮点

c++ - 不需要输出。为什么 "gx+gy"没有输出?