[英]What is the past-the-end iterator in STL C++?
任何人都可以解釋我past-the-end
的意義是什么。 為什么我們稱end()
函數為last-the-end?
函數begin()
和end()
定義了半開放范圍( [begin, end)
) ,這意味着:
范圍包括第一個元素但不包括最后一個元素。 因此,名稱結束。
半開放范圍的優點是:
它避免了對空范圍的特殊處理。 對於空范圍, begin()
等於end()
。
它使迭代元素的循環的結束標准變得簡單:只要未到達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.