Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代器比数组[i]快吗?_C++_Arrays_Iterator_Arrayiterator - Fatal编程技术网

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 >简单地包装一个指针(在某些实现中,它们甚至可以是指针),因此,在优化阶段之后,即使在这种情况下,你也只是做指针算术。显然我没有太多思考,而是发表了评论。这有点像整件事。它应该被否决。对不起,伙计们!