因为对我而言,我无法弄清楚它们是多么多余。
vector<string>::iterator iter1
vector<string>::const_iterator iter2
也许他们更快?
答案 0 :(得分:7)
迭代器并不打算更快,它们的目的是为了更快,它们是更快,更通用。 array[i]
仅对数组有效,而不是链表。
答案 1 :(得分:6)
迭代器允许开发容器无关的算法。这样std::sort
之类的内容并不一定要关心它是vector
还是your_datastructure_here
,只要它符合适当的迭代器要求。
考虑在list
,vector
或裸阵列中找到最大值。
int A[...]; // ...some array
std::list<int> L; // ...some list
std::vector<int> V; // ...some vector
int* maxA = std::max_element(A, A + 10);
std::list<int>::iterator maxL = std::max_element(L.begin(), L.end());
std::vector<int>::iterator maxV = std::max_element(V.begin(), V.end());
答案 2 :(得分:3)
在通过向量“随机访问”的简单情况下?否。
实际上,你的矢量迭代器可能是根据数组访问来定义的,并且会非常快。
您获得的是在通用编程中使用它们的能力。您可能并不总是使用向量,并非所有容器都支持随机访问。
使用迭代器不仅是为了保持一致性,而且是为了利用模板元编程这种一致性为您提供的能力。
而且,如果不出意外,它们是一种安全且有用的抽象。
答案 3 :(得分:1)
它们推广到其他集合,其中array [i]慢得多(即列表)甚至不可能(记录集)。
此外,STL算法使用它们。 STL算法设计用于任何可迭代的集合 - 为什么要排除向量?
两个迭代器的存在 - 一个const
而另一个没有 - 是由const引用在C ++中的工作方式所激发的。如果您拥有的是const
参考向量,为什么您应该更改内部的内容?因此const_iterator
。常规iterator
返回对元素的可写引用。
答案 4 :(得分:-1)
迭代器是一个通用的概念。它们适用于各种容器,并具有类似的界面。
像arr_int[i]
那样直接访问数组元素肯定更快,因为它直接转换为指针算法。