14

In C++ library arrays, what are some cases where it's useful to have the .begin() and .end() member functions?

On cplusplus.com, the example use is to iterate through an array:

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

But

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

can be used for that.

4

4 回答 4

26

begin()end()返回迭代器。迭代器提供统一的语法来访问不同类型的容器。乍一看,它们可能看起来像遍历简单数组的过度杀伤力,但考虑到您可以编写相同的代码来遍历列表或映射。

这种对各种容器的统一访问将允许您编写适用于所有容器的算法,而无需了解它们的内部结构。从头到尾的 for 循环只是更大马赛克中的第一块。只需查看标准算法列表即可了解这种简单抽象的强大功能。

于 2015-08-20T18:43:35.240 回答
10

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

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

于 2015-08-20T18:40:11.357 回答
7

除了与其他容器通用之外,begin,对于范围end很有用

for (const auto& e : myarray)
于 2015-08-20T18:47:51.553 回答
0

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

于 2015-08-21T08:58:41.543 回答