2

可能重复:
为什么使用迭代器而不是数组索引?

因为在我的一生中,我无法弄清楚它们是如何不多余的。

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

也许他们更快?

4

5 回答 5

7

迭代器的目的不是更快,它们的目的是尽可能快,它们确实如此,而且更加通用。array[i]仅对数组有效 - 而不是链表。

于 2011-05-31T15:11:17.577 回答
6

迭代器允许开发独立于容器的算法。这样,类似的东西std::sort实际上并不需要关心它是 avector还是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());
于 2011-05-31T15:09:57.437 回答
3

在通过向量“随机访问”的简单情况下?不。

事实上,您的向量迭代器可能是根据数组访问定义的,并且将完全一样快。

您获得的是在通用编程中使用它们的能力。您可能并不总是使用向量,并且并非所有容器都支持随机访问。

使用迭代器不仅是为了保持一致性,而且是为了利用这种一致性为您提供的模板元编程的能力。

而且,如果不出意外,它们是一种安全且有用的抽象。

于 2011-05-31T15:11:03.507 回答
1

它们推广到其他数组 [i] 慢得多的集合(即列表)甚至不可能(记录集)。

此外,STL 算法使用它们。STL 算法被设计用于任何可迭代的集合——为什么要排除向量?

两个迭代器的存在——一个const和另一个不存在——是由 const 引用在 C++ 中的工作方式所激发的。如果你只有const一个向量的引用,为什么你应该能够改变里面的东西?因此const_iterator。正则iterator返回一个元素的可写引用。

于 2011-05-31T15:12:50.273 回答
-1

迭代器是一个通用概念。它们适用于各种容器并具有相似的界面。

直接访问数组元素arr_int[i]肯定更快,因为它直接转换为指针算术。

于 2011-05-31T15:12:40.697 回答