如何解决迭代器比array [i]快吗? [重复]
| 这个问题已经在这里有了答案:解决方法
迭代器的目的不是要更快,它们要一样快,而且要通用得多。 “ 0”仅对数组有效,而对链表无效。
, 迭代器允许开发独立于容器的算法。这样,只要满足适当的迭代器要求,类似ѭ1的东西就不必真正关心它是ѭ2还是ѭ3。
考虑在
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());
, 在通过向量“随机访问”的简单情况下?没有。
实际上,您的矢量迭代器可能是根据数组访问定义的,并且速度将非常快。
您将获得在通用编程中使用它们的能力。您可能并不总是使用矢量,并且并非所有容器都支持随机访问。
使用迭代器不仅可以保持一致性,还可以利用这种一致性为您提供的利用模板元编程的能力。
并且,如果没有其他要求,它们是安全且有用的抽象。
, 它们归纳到array [i]慢得多(即列表)甚至不可能(记录集)的其他集合。
此外,STL算法也使用它们。 STL算法旨在与任何可迭代的集合一起使用-为什么要排除向量?
const引用在C ++中的工作方式促使了两个迭代器的存在-一个为const
,另一个为-。如果您所拥有的只是对向量的const
引用,为什么您应该能够更改其中的内容?因此ѭ9。常规“ 10”返回对元素的可写引用。
, 迭代器是一个通用概念。它们适用于各种容器,并具有相似的接口。
直接访问数组元素(如arr_int[i]
)绝对更快,因为它直接转换为指针算法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。