迭代程序是否比array[i]快



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

因为就我的一生而言,我不知道它们是如何不多余的。

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

也许他们更快?

迭代程序的目的不是更快,而是更快,而且更通用。array[i]仅对数组有效,对链表无效。

迭代程序允许开发与容器无关的算法。通过这种方式,像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());

在通过向量进行"随机访问"的简单情况下?编号

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

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

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

而且,如果没有别的,它们是一个安全而有用的抽象概念。

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

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

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

Iterators是一个通用概念。它们可以在各种容器上工作,并且具有类似的界面。

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

相关内容

最新更新