这个问题,之前使用编译器DEVC++的时候,还没有发现,换用了visual studio之后,就开始疯狂报错,vector iterator not decrementable
于是想起来还有数据结构里面学到的list(在stl中是双向链表)
所以就解决了这个问题,只需要将声明由vector <type>换为list <type>就解决了
示例代码:
#include <list>
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
list <int> vec;
for (int i = 0 ; i <= 10 ; i++){
if (i % 2 == 0) {
vec.push_back(1);
}
else {
vec.push_back(3);
}
}
for (auto iter : vec) { //这里是复制了一份vec(调用了拷贝构造函数),会占用新的内存,但优点是安全
cout << iter;
}
cout << endl;
auto it = vec.begin(); //这种写法的效果类似于使用for(auto &iter : vec), 可以修改其中的值, 但区别是这里需要加*
while (it != vec.end()) {
if ((*it) == 1) {
vec.erase(it++);
}
else {
++it;
}
}
for (auto& iter : vec) { //这里使用了引用,可以直接修改其中的值
cout << iter;
}
system("pause");
return 0;
}
运行结果:
可以从上面的代码看到,只用修改定义,其他部分都不用修改
原因是:vector有的方法和成员变量,list全都有,且使用方法相同