在进行vector反向遍历时产生问题
原始写法
#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> years(5,0);
for (int i = 0; i < years.size(); i++)
{
cin >> years[i];
}
for (vector<int>::iterator i = years.end()-1; i>=years.begin(); i--)
{
cout << *i;
}
}
这里会报错,迭代器越界,原因是迭代器在达到i=years.begin后仍然向前移动导致越界
解决方案
正确写法为
#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> years(5,0);
for (int i = 0; i < years.size(); i++)
{
cin >> years[i];
}
for (vector<int>::iterator i = years.end()-1; i>=years.begin(); i--)
{
cout << *i;
if (i==years.begin())
{
break;
}
}
}
这里会直接跳出避免出错
或者利用反向迭代器进行书写
#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector <int> years(5,0);
for (int i = 0; i < years.size(); i++)
{
cin >> years[i];
}
for (vector<int>::reverse_iterator i= years.rbegin(); i!=years.rend();i++)
{
cout << *i;
}
}