stl中容器按儲存方式分為兩類:一是按陣列容器順序儲存的序列式容器(如:vector, deque) 另一類是以不連續的節點形式儲存的容器(list set map)
迭代器失效小例項:
void printvector(vector& v)
cout << endl;
}void testvector()
}
迭代器失效:對於序列式容器,比如vector刪除當前的iterator會使後面所有元素的iteraotr都是小,這是因為順序容器記憶體是連續分配,刪除乙個元素後導致所有的元素會向前移動乙個位置.,erase方法可以返回下乙個有效的iterator,可以用迭代器接收這個iterator。這樣就不會發生迭代器失效的事情了
迭代器失效解決辦法:
1.vector例項
//迭代器失效
void printvector(vector& v)
it = v.begin();
while (it != v.end())
cout << endl;}
void testvector()
2.list例項
void printlist(list< int>& l1)
cout << endl;
}void test2()
printlist(l1);
}
迭代器失效之原理分析
vector迭代器實現為類指標 class vector protected vector base tp,alloc iterator erase iterator first,iterator last 可以看到如果容量足夠 無需擴容 則操作是將插入位置後的元素整體往後挪動乙個位置,也就是插入位...
迭代器失效 典型的迭代器失效
首先對於vector而言,新增和刪除操作可能使容器的部分或者全部迭代器失效。那為什麼迭代器會失效呢?vector元素在記憶體中是順序儲存,試想 如果當前容器中已經存在了10個元素,現在又要新增乙個元素到容器中,但是記憶體中緊跟在這10個元素後面沒有乙個空閒空間,而vector的元素必須順序儲存一邊索...
迭代器失效
迭代器 iterator 是乙個可以對其執行類似指標的操作 如 解除引用 operator 和遞增 operator 的物件,我們可以將它理解成為乙個指標。但它又不是我們所謂普通的指標,我們可以稱之為廣義指標,你可以通過sizeof vector iterator 來檢視,所佔記憶體並不是4個位元組...