list為什麼「越界」了,還能輸出值

2021-10-05 10:01:55 字數 1157 閱讀 7188

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())

輸出:

為什麼最後乙個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是動態分配記憶體的,實際上alloc分配的記憶體不是插入的實際數值個數,實際分配的記憶體可能是插入數值的2倍或1.5倍(為了防止頻繁插入超過容器的空間後,重新分配記憶體)。

因此雖然k指向了end迭代器,但是輸出了值。不過這個值是隨機分配的,沒有任何實際意義。

為什麼 比list()更快?

我最近比較了和list 的處理速度,並且驚訝地發現執行速度比list 快三倍以上。我跑了相同的測試與 和dict 結果幾乎相同 和 兩個花了大約0.128sec 百萬次,而list 和dict 大約花費每個0.428sec 萬次。後來我查了查原因,得到的結論如下 list 需要全域性查詢和函式呼叫,...

陣列越界會出現什麼 為什麼會出現刺繡?

為什麼會出現刺繡,可能各個地方的繡種不同,答案也不盡相同。查翻資料,今天談談地處江南地區的 蘇繡 是為何出現。蘇繡的出現離不開四個字 斷髮文身 斷髮文身的古人 蘇繡至今已有2000餘年的歷史,傳說 於仲雍的孫女 女紅 首製繡衣。古代周太王古公亶父的兒子太伯 仲雍來到今江南蘇州一帶建立了吳國,當地人有...

Python 為什麼比 list 快?

在日常使用 python 時,我們經常需要建立乙個列表,相信大家都很熟練了吧?方法一 使用成對的方括號語法 list a 方法二 使用內建的 list list b list 上面的兩種寫法,你經常使用哪乙個呢?是否思考過它們的區別呢?對於第乙個問題,使用timeit模組的 timeit 函式就能簡...