可能重复:
为什么使用迭代器而不是数组索引?
因为在我的一生中,我无法弄清楚它们是如何不多余的。
vector<string>::iterator iter1
vector<string>::const_iterator iter2
也许他们更快?
可能重复:
为什么使用迭代器而不是数组索引?
因为在我的一生中,我无法弄清楚它们是如何不多余的。
vector<string>::iterator iter1
vector<string>::const_iterator iter2
也许他们更快?
迭代器的目的不是更快,它们的目的是尽可能快,它们确实如此,而且更加通用。array[i]
仅对数组有效 - 而不是链表。
迭代器允许开发独立于容器的算法。这样,类似的东西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());
在通过向量“随机访问”的简单情况下?不。
事实上,您的向量迭代器可能是根据数组访问定义的,并且将完全一样快。
您获得的是在通用编程中使用它们的能力。您可能并不总是使用向量,并且并非所有容器都支持随机访问。
使用迭代器不仅是为了保持一致性,而且是为了利用这种一致性为您提供的模板元编程的能力。
而且,如果不出意外,它们是一种安全且有用的抽象。
它们推广到其他数组 [i] 慢得多的集合(即列表)甚至不可能(记录集)。
此外,STL 算法使用它们。STL 算法被设计用于任何可迭代的集合——为什么要排除向量?
两个迭代器的存在——一个const
和另一个不存在——是由 const 引用在 C++ 中的工作方式所激发的。如果你只有const
一个向量的引用,为什么你应该能够改变里面的东西?因此const_iterator
。正则iterator
返回一个元素的可写引用。
迭代器是一个通用概念。它们适用于各种容器并具有相似的界面。
直接访问数组元素arr_int[i]
肯定更快,因为它直接转换为指针算术。