#include <vector>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
vector<int > v;
auto iter = v.begin();
vector<int>::iterator iter2=v.begin();
v.push_back(4);
cout<<"int0 "<<v[0]<<endl;
cout<<"iter2"<<*iter2<<endl; //到这里就报错.为什么?
cout<<"int"<<*iter<<endl;
return 0;
}
g++ iterTest.cpp -std=c++11 -o iterTest
PHP中文网2017-04-17 12:08:15
#include <vector>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
vector<int> v;
v.push_back(4);
vector<int>::iterator iter2=v.begin();
auto iter = v.begin();
cout<<"int0 "<<v[0]<<endl;
cout<<"iter2"<<*iter2<<endl; //到这里就报错.为什么?
cout<<"int"<<*iter<<endl;
return 0;
}
這樣就好了。
因為vector是動態成長的容器,當建立一個容器v,此時裡面的元素為空,且capacity容量也為0,此時執行begin()傳回的迭代器與end()傳回的相同。接著向裡面新增元素時,標準函式庫會自動為其新分配一段可以容納該元素的記憶體空間,並將該元素儲存進去,先前的迭代器就失效了。所以解引用時,該迭代器所指的位置並沒有元素,報錯。
高洛峰2017-04-17 12:08:15
int main(){
vector<int > v;
v.push_back(4);
vector<int>::iterator iter2=v.begin();
cout<<"iter2"<<*iter2<<endl;
return 0;
}
程式碼如上調整,因為v.begin()指向的是vector的第一個元素,而你vector