2013-03-06 68 views

回答

27

功能begin()end()定義半開區間([begin, end),這意味着:
範圍包括第一個元素,但不包括最後一個元素。因此,這個名字結束了。

enter image description here

一個半開放範圍的優點是:

  1. 它避免了空的範圍進行特殊處理。對於空白區域,begin()等於 end()

  2. 這使得最終的標準簡單爲遍歷元素的循環:該循環簡單 只要繼續end()沒有達到

+2

+1很好的答案。 – Nawaz 2013-03-06 16:17:30

+0

插圖聞起來像Josuttis :) – fredoverflow 2013-03-06 16:30:36

+1

不僅僅是'begin()'和'end()';一般來說,'[begin,end]'定義了一個**序列**的值,而不管迭代器來自何處或哪些值被保存。 – 2013-03-06 16:58:39

2

從字面上看,因爲它指向數組的末尾。

它被使用,因爲那個元素是空的,並且可以迭代到,但不能被解除引用。

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

不只是數組;無論迭代器來自哪裏或哪些值被保存,「end」迭代器都會指向目標序列的末尾。 – 2013-03-06 16:59:15

6

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

如果您解除引用end(),那麼結果爲未定義的行爲

5

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

這就是爲什麼我們可以寫for (auto it = v.begin(); it != v.end(); ++it)

+1

是的!第一個不談容器的答案,不需要創建序列。 – 2013-03-06 17:00:09

2

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

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

這將工作正常。

相反,如果你給了:

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

會錯過排序的最後一個字符。

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