我只是在向量中的迭代器上寫一個測試程序,在開始時我剛創建了一個向量並用一系列數字1-10初始化它。循環與向量中的迭代器
之後,我創建了一個迭代器「myIterator」和一個常量迭代器「iter」。我用它來顯示矢量的內容。
後來我將「myIterator」分配給了「anotherVector.begin()」。所以他們指的是同樣的事情。
與myIterator檢查由
//cout << /* *myIterator << */"\t" << *(anotherVector.begin()) << endl;
所以在第二迭代循環我剛更換 「anotherVector.begin()」。
但是,這產生了不同的輸出。
代碼是:
vector<int> anotherVector;
for(int i = 0; i < 10; i++) {
intVector.push_back(i + 1);
cout << anotherVector[i] << endl;
}
cout << "anotherVector" << endl;
//*************************************
//Iterators
cout << "Iterators" << endl;
vector<int>::iterator myIterator;
vector<int>::const_iterator iter;
for(iter = anotherVector.begin(); iter != anotherVector.end(); ++iter) {
cout << *iter << endl;
}
cout << "Another insertion" << endl;
myIterator = anotherVector.begin();
//cout << /* *myIterator << */"\t" << *(anotherVector.begin()) << endl;
myIterator[5] = 255;
anotherVector.insert(anotherVector.begin(),200);
//for(iter = myIterator; iter != anotherVector.end(); ++iter) {
//cout << *iter << endl;
//}
for(iter = anotherVector.begin(); iter != anotherVector.end(); ++iter) {
cout << *iter << endl;
}
使用
for(iter = anotherVector.begin(); iter != anotherVector.end(); ++iter) {
cout << *iter << endl;
}
輸出給出:
Iterators
1
2
3
4
5
6
7
8
9
10
Another insertion
200
1
2
3
4
5
255
7
8
9
10
和輸出使用
for(iter = myIterator; iter != anotherVector.end(); ++iter) {
cout << *iter << endl;
}
給出:
Iterators
1
2
3
4
5
6
7
8
9
10
Another insertion
0
0
3
4
5
255
7
8
9
10
81
0
1
2
3
4
5
6
7
8
9
10
0
0
0
0
0
0
0
0
97
0
200
1
2
3
4
5
255
7
8
9
10
如果他們只是指向相同的地址,爲什麼會有這麼多的差別。
而不是發佈我自己的答案,因爲你擊敗了我,[這裏是鏈接'vector'迭代器失效](http://en.cppreference.com/w/cpp/container/vector#Iterator_invalidation)以供參考。 – ShadowRanger
感謝它,我已經與地址運營商確認。 –