#include "stdafx.h"
#include <stdlib.h>
#include <vector>
using namespace std;
int main()
{
//vector<int> vit; 剛開始定義空的vector報錯,以為是沒值導致的錯誤
vector<int> vit(5,1);
vector<int>::iterator vi;
vi = vit.begin();
vit.push_back(2);
// 加上這句就會報錯
vi++;
system("pause");
return 0;
}
各位大佬好,我當前環境是vs2015,在網上查的迭代器文章都說可以通過++自增指向下個元素,但運行到vi++的時候就會報Expression: vector iterator not incrementable.
錯誤提示迭代器不可遞增,為什么會這樣呢?
uj5u.com熱心網友回復:
vit.push_back(2) 與 vi = vit.begin() 換下位置就不會錯了uj5u.com熱心網友回復:
問題原因:因為你開始分配了一個容量為5,初始值為1的vector,你獲取了迭代器的記憶體地址,然后你尾插一個值,編譯器會這么處理:將原來的值全部拷貝,重新在地址中找一塊空間,將新值一起拷貝到新空間,這個時候,你用以前的地址來做迭代器++,肯定是要崩的,你操作的是地址不能沒有權限給你這么操作,可能你在Linux平臺能編過去也說不定。uj5u.com熱心網友回復:
你好,原來是這樣啊,我開始想著在末尾追加元素,不會使記憶體地址改變,原來是整個copy到新地址。但是我把這個放到vc6.0跑就不會報這個錯,是不是因為6.0版本對這種錯誤就沒有檢查呢?
uj5u.com熱心網友回復:
VC6.0版本對vector的檢查還不是很完善,每個版本都會有很多bug,微軟都留到后面版本2010版本之后來修正的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/221066.html
標籤:基礎類
