C++ 迭代器比数组[i]快吗?
可能重复:C++ 迭代器比数组[i]快吗?,c++,arrays,iterator,arrayiterator,C++,Arrays,Iterator,Arrayiterator,可能重复: 因为就我的一生而言,我无法理解它们是如何不多余的 vector<string>::iterator iter1 vector<string>::const_iterator iter2 向量::迭代器iter1 向量::常量迭代器iter2 也许它们更快?迭代器允许开发与容器无关的算法。这样,像std::sort这样的东西实际上不必关心它是向量还是您的数据结构,只要它满足适当的迭代器要求 考虑在列表、向量或裸数组中查找最大值 int A[...];
因为就我的一生而言,我无法理解它们是如何不多余的
vector<string>::iterator iter1
vector<string>::const_iterator iter2
向量::迭代器iter1
向量::常量迭代器iter2
也许它们更快?迭代器允许开发与容器无关的算法。这样,像
std::sort
这样的东西实际上不必关心它是向量还是您的数据结构,只要它满足适当的迭代器要求
考虑在列表
、向量
或裸数组中查找最大值
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());
int A[…];/。。。一些数组
std::列表L;//。。。一些清单
标准::向量V;/。。。一些向量
int*maxA=std::max_元素(A,A+10);
std::list::迭代器maxL=std::max_元素(L.begin(),L.end());
std::vector::iterator maxV=std::max_元素(V.begin(),V.end());
在通过向量“随机访问”的简单情况下?没有
事实上,向量迭代器可能是根据数组访问定义的,并且速度也会一样快
您获得的是在泛型编程中使用它们的能力。您可能并不总是使用向量,并且并非所有容器都支持随机访问
使用迭代器不仅是为了一致性,而且是为了利用这种一致性为您提供的模板元编程能力
而且,如果没有其他东西的话,它们是一种安全且有用的抽象。迭代器的目的不是更快,而是更快,而且更通用<代码>数组[i]
仅对数组有效,而不是链表。迭代器是一个通用概念。它们在各种容器上工作,并且具有类似的接口
像arr\u int[i]
这样直接访问数组元素肯定更快,因为它直接转换为指针运算。它们推广到数组[i]速度慢得多(即列表)甚至不可能(记录集)的其他集合
STL算法也使用它们。STL算法设计用于任何可编辑的集合-为什么要排除向量
两个迭代器的存在——一个代码> const >另一个不是-是由C++中的const引用方式驱动的。如果你所拥有的只是一个向量的
const
ref,为什么你要改变里面的东西呢?因此,常量迭代器
。常规的迭代器
返回对元素的可写引用。在您关心的上下文中度量是唯一有效的答案。根据实际容器的不同,迭代器的增量可能比索引更快(想想链表)。真正的原因是他在回答中写的。@Tamás:。。。和另外两个回答者一起。@Alexandre:Woops,我对复制品的搜索显然很差。看看RHS上的相关报道,我是个白痴:)@Tomalak Geret'kal我写评论时没有其他答案,但是是的。这就是它的意思。谢谢现在是C++标准算法,这是OP实际使用的。通常迭代器的代码> STD::vector < /Cube >简单地包装一个指针(在某些实现中,它们甚至可以是指针),因此,在优化阶段之后,即使在这种情况下,你也只是做指针算术。显然我没有太多思考,而是发表了评论。这有点像整件事。它应该被否决。对不起,伙计们!