迭代器失效小分析

2021-07-13 23:54:12 字數 815 閱讀 1885

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個位元組...