迭代器比数组[i]快吗?

时间:2011-05-31 15:07:14

标签: c++ arrays iterator arrayiterator

  

可能重复:
  Why use iterators instead of array indices?

因为对我而言,我无法弄清楚它们是多么多余。

vector<string>::iterator iter1
vector<string>::const_iterator iter2

也许他们更快?

5 个答案:

答案 0 :(得分:7)

迭代器并不打算更快,它们的目的是为了更快,它们是更快,更通用。 array[i]仅对数组有效,而不是链表。

答案 1 :(得分:6)

迭代器允许开发容器无关的算法。这样std::sort之类的内容并不一定要关心它是vector还是your_datastructure_here,只要它符合适当的迭代器要求。

考虑在listvector或裸阵列中找到最大值。

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]那样直接访问数组元素肯定更快,因为它直接转换为指针算法。