.begin() 和 .end() 有什么意义?

Whats the point of .begin() and .end()?

在 C++ 库数组中,在哪些情况下使用 .begin().end() 成员函数是有用的?

在 cplusplus.com 上,示例使用的是遍历数组:

for ( auto it = myarray.begin(); it != myarray.end(); ++it )

但是

for (int i = 0; i < myarray.size(); i++)

可用于此。

标准容器的全部意义在于能够更改它们并使用相同的语法。如果你有一个链表,第一个语法仍然有效。

也相当于一个指针。 i 是一个索引,所以 myarray[i] 比它稍慢。

begin()end() return 迭代器。迭代器提供统一的语法来访问不同类型的容器。乍一看,它们对于遍历一个简单的数组来说可能有点矫枉过正,但考虑到您可以编写相同的代码来遍历一个列表或一个映射。

这种对各种容器的统一访问将允许您编写适用于所有容器的算法,而无需了解它们的内部结构。从开始到结束的 for 循环只是更大马赛克中的第一部分。只需查看 standard algorithms 的列表即可领略这种简单抽象的力量。

除了与其他容器通用外,beginendfor range

有用
for (const auto& e : myarray)

现在尝试遍历链表。唯一有效的方法是从一项迭代到下一项,直到到达终点。