std::end(myVector) 和 myVector.end() 之间的区别
Difference between std::end(myVector) and myVector.end()
我注意到有两种方法可以获取向量(或其他容器类)的结束迭代器:
std::end(myVector)
和
myVector.end()
其他各种容器迭代器函数也是如此,begin
、cend
、cbegin
、rend
、rbegin
、crend
、crbegin
、find
等。 我想知道的是这些之间是否有任何功能差异? 如果没有,是否有一些历史原因同时拥有它们?
(很抱歉,如果这是重复的,我已经搜索了所有方法,并找到了其中一种或另一种方法的大量来源,但没有一个提到两者或比较两者。
有一个历史原因:在 C++11 之前,只有成员函数版本存在。C++11 添加了非成员,它们也适用于普通的 C 样式数组,因此可以认为更通用。
int a[] = {3, 1, 5, 67, 28, -12};
std::sort(std::begin(a), std::end(a));
当应用于标准库容器时,std::begin
和std::end
的作用是调用容器的begin()
和end()
成员函数,因此没有功能差异。
C++14增加了std::cbegin
、std::cend
、std::rbegin
、std::rend
、std::crbegin
和std::crend
,具有类似的行为。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 在 myVector 类中重载运算符 + 时出错
- 反转依赖于 end() 的迭代器
- std::multimap<std::chrono::milliseconds, T>::rbegin 在 MSVS-13 中指向 end()?
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- 在 ifcondition al中 find() C++ STL 中的 == a.end() 有什么用?
- 野牛/yacc 解析器在不被空格分隔时跳过 grammer - "unexpected $end"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 了解向量中的 .begin 和 .end
- 如何实现链表的 end()?
- 使用 map.end() 访问 map 的最后一个元素
- C++ const char with .begin() and .end()
- 接收"Error compiling: 0:1(1): error: syntax error, unexpected $end" C++、GLSL、着色器文件
- 为什么 std::find( s.begin(), s.end(), val ) 比集合 s 的 s.find(val) 慢 1000 倍<int>?
- 如何使用vector.begin()和vector.end()遍历矩阵?
- 我当前实现的双向链表类是否需要重构迭代器 end() 功能?
- 给定 myvector.start() 和 myvector.end(),我想在不复制数据的情况下创建 myvector
- std::end(myVector) 和 myVector.end() 之间的区别