任何人都可以解释我是什么意思past-the-end
。为什么我们称end()
函数为过去式?
问问题
12750 次
5 回答
50
函数begin()
和end()
定义一个半开范围([begin, end)
),这意味着:
范围包括第一个元素但不包括最后一个元素。因此,名字过去了。
半开范围的优点是:
它避免了对空范围的特殊处理。对于空范围,
begin()
等于end()
。它使迭代元素的循环的结束标准变得简单:只要
end()
没有达到,循环就会继续
于 2013-03-06T16:03:36.627 回答
7
因为它不指向容器的最后一个元素,而是指向容器最后一个元素之后的某个位置。
如果取消引用end()
它会导致未定义的行为。
于 2013-03-06T15:55:33.790 回答
5
与数学中的区间一样,stl 使用[begin, end)
.
这就是为什么我们可以写for (auto it = v.begin(); it != v.end(); ++it)
于 2013-03-06T16:01:23.167 回答
2
从字面上看,因为它指向数组末尾之后的位置。
使用它是因为该元素是空的,并且可以迭代,但不能取消引用。
int arry[] = {1, 2, 3, 4, /* end */ };
^^^^^^^
std::end(arry) would point here.
于 2013-03-06T15:55:30.530 回答
2
对上述正确答案再补充一点。这样做也是为了与数组兼容。例如在下面的代码中:
char arr[5];
strcpy(arr, "eakgl");
sort(&arr[0], &arr[5]);
这将正常工作。
相反,如果你给了:
sort(&arr[0], &arr[4]);
它会错过排序最后一个字符。
这也有助于自然地表示空容器。
于 2013-03-06T16:09:37.967 回答