簡體   English   中英

STL C ++中的過去迭代器是什么?

[英]What is the past-the-end iterator in STL C++?

任何人都可以解釋我past-the-end的意義是什么。 為什么我們稱end()函數為last-the-end?

函數begin()end()定義了半開放范圍( [begin, end) ,這意味着:
范圍包括第一個元素但不包括最后一個元素。 因此,名稱結束。

在此輸入圖像描述

半開放范圍的優點是:

  1. 它避免了對空范圍的特殊處理。 對於空范圍, begin()等於end()

  2. 它使迭代元素的循環的結束標准變得簡單:只要未到達end() ,循環就會繼續

因為它不指向容器的最后一個元素,但在某處過去容器的最后一個元素。

如果取消引用end()則會導致未定義的行為

像數學中的間隔一樣,stl使用[begin, end)

這就是我們可以寫的原因for (auto it = v.begin(); it != v.end(); ++it)

從字面上看,因為它指向一個超過數組末尾的一個。

之所以使用它是因為該元素為空,可以迭代但不能解除引用。

int arry[] = {1, 2, 3, 4, /* end */ };
                         ^^^^^^^
                    std::end(arry) would point here.

為上述正確答案添加另一點。 這也是為了與數組兼容。 例如,在下面的代碼中:

char arr[5];
strcpy(arr, "eakgl");
sort(&arr[0], &arr[5]);

這樣可以正常工作。

相反,如果你給了:

sort(&arr[0], &arr[4]);

它會錯過排序最后一個字符。

這也有助於自然地表示空容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM