【问题标题】:Reverse output of vector array giving strange result向量数组的反向输出给出奇怪的结果
【发布时间】:2018-04-19 08:05:59
【问题描述】:

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

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

【问题讨论】:

  • 你应该使用rbegin()rend()

标签: c++


【解决方案1】:

向量的end 迭代器未引用有效数据。有效数据来自[begin, end)(半封闭半开放范围)。所以你不能指望它上面的* 操作符可以工作。事实上,这样做是未定义的行为。

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

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

【讨论】:

  • 我明白了。非常感谢您的帮助。
  • half 封闭范围和 half 开放范围”是什么意思?
  • @499602D2,我正在使用this terminology
猜你喜欢
  • 2019-07-27
  • 2021-12-30
  • 1970-01-01
  • 2013-08-20
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多