任何人都可以解释我是什么意思past-the-end
。为什么我们称end()
函数为过去式?什么是STL C++中的过去式迭代器?
回答
功能begin()
和end()
定义半开区间([begin, end)
),这意味着:
范围包括第一个元素,但不包括最后一个元素。因此,这个名字结束了。
一个半开放范围的优点是:
它避免了空的范围进行特殊处理。对于空白区域,
begin()
等于end()
。这使得最终的标准简单为遍历元素的循环:该循环简单 只要继续
end()
没有达到
从字面上看,因为它指向数组的末尾。
它被使用,因为那个元素是空的,并且可以迭代到,但不能被解除引用。
int arry[] = {1, 2, 3, 4, /* end */ };
^^^^^^^
std::end(arry) would point here.
不只是数组;无论迭代器来自哪里或哪些值被保存,“end”迭代器都会指向目标序列的末尾。 – 2013-03-06 16:59:15
因为它并不指向容器的最后元素,但在某处过去容器的最后一个元素。
如果您解除引用end()
,那么结果为未定义的行为。
像数学中的区间一样,stl使用[begin, end)
。
这就是为什么我们可以写for (auto it = v.begin(); it != v.end(); ++it)
是的!第一个不谈容器的答案,不需要创建序列。 – 2013-03-06 17:00:09
添加另一点以上正确答案。 这也是为了与数组兼容。 例如在下面的代码:
char arr[5];
strcpy(arr, "eakgl");
sort(&arr[0], &arr[5]);
这将工作正常。
相反,如果你给了:
sort(&arr[0], &arr[4]);
会错过排序的最后一个字符。
这也有助于自然地表示空容器。
- 1. 什么是迭代器,C++?
- 2. STL容器迭代器和C指针迭代器有什么区别
- 3. 为什么在C++ STL中分离算法,迭代器和容器STL
- 4. C++ STL列表迭代器
- 5. 为什么不能int型是STL向量中的迭代器?
- 6. STL中迭代器的类型是什么?
- 7. C++迭代器做什么?
- 8. 在迭代器中使用STL容器常见的误用是什么?
- 9. 迭代器和STL容器
- 10. STL向量,迭代器和插入(C++)
- 11. C++:使用常量与STL迭代器
- 12. C++ STL:问题与迭代器
- 13. C++ STL;迭代包含STL容器的类吗?
- 14. 什么是STL迭代器上下文中的奇异值和非奇异值?
- 15. 启用STL迭代器调试真的能做什么?
- 16. STL迭代器和'const'
- 17. STL迭代器和模板
- 18. STL,列表,迭代器
- 19. STL地图迭代器集
- 20. 定制STL迭代器类
- 21. C++迭代器+整数当迭代器结束时的结果是什么?
- 22. 在C++中迭代STL类11
- 23. 用C++中的迭代器在stl类中编写包装
- 24. 是否有一个C#等价于STL输出迭代器?
- 25. STL迭代器到构造函数中
- 26. 什么用作end()迭代器C++?
- 27. C++ STL:迭代器和reverse_iterator缺少基类的代码复制
- 28. 在C++中编写我自己的stl-like迭代器实现
- 29. Ruby C++样式迭代器
- 30. 什么是拼接的STL代码?
+1很好的答案。 – Nawaz 2013-03-06 16:17:30
插图闻起来像Josuttis :) – fredoverflow 2013-03-06 16:30:36
不仅仅是'begin()'和'end()';一般来说,'[begin,end]'定义了一个**序列**的值,而不管迭代器来自何处或哪些值被保存。 – 2013-03-06 16:58:39