1 問題
list<int> List;
List.push_back(1);
List.push_back(2);
List.push_back(3);
List.push_back(4);
List.push_back(5);
List.push_back(6);
list<int>::iterator iterator1 = List.begin();
while(iterator1 != List.end()){
list<int>::iterator i, j, k;
i = (iterator1++);
j = i;
k = (++j);
cout <<" i:"<< *i;
cout <<" k:" << *k;
cout <<endl;
}
輸出:
爲什麼最後一個k明明指向了end迭代器,爲什麼還能輸出值呢?
改變源代碼:
list<int> List;
List.push_back(1);
List.push_back(2);
List.push_back(3);
List.push_back(4);
List.push_back(5);
List.push_back(8);
list<int>::iterator iterator1 = List.begin();
while(iterator1 != List.end()){
list<int>::iterator i, j, k;
i = (iterator1++);
j = i;
k = (++j);
cout <<" i:"<< *i;
cout <<" k:" << *k;
cout <<endl;
}
輸出:
發現端倪。
2 問題解決
因爲list是動態分配內存的,實際上alloc分配的內存不是插入的實際數值個數,實際分配的內存可能是插入數值的2倍或1.5倍(爲了防止頻繁插入超過容器的空間後,重新分配內存)。
因此雖然k指向了end迭代器,但是輸出了值。不過這個值是隨機分配的,沒有任何實際意義。