迭代程序是否比array[i]快
Are Iterators faster than array[i]?
可能重复:
为什么使用迭代器而不是数组索引?
因为就我的一生而言,我不知道它们是如何不多余的。
vector<string>::iterator iter1
vector<string>::const_iterator iter2
也许他们更快?
迭代程序的目的不是更快,而是更快,而且更通用。array[i]
仅对数组有效,对链表无效。
迭代程序允许开发与容器无关的算法。通过这种方式,像std::sort
这样的东西实际上不必关心它是vector
还是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
,另一个不是——是由常量引用在C++中的工作方式引起的。如果你所拥有的只是一个向量的const
引用,为什么你应该能够改变里面的东西?因此CCD_ 9。规则CCD_ 10返回对元素的可写引用。
Iterators是一个通用概念。它们可以在各种容器上工作,并且具有类似的界面。
像arr_int[i]
那样直接访问数组元素肯定更快,因为它直接转换为指针算术。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 避免在 C/C++ 和 std::array 中使用 TCP 时阻止程序
- 您可以在此程序中解释Array 5的目的吗?
- std::array不再发生初始化程序语法错误
- 从 PHP 调用 C++ 应用程序 - 输出显示"Array"
- 迭代程序是否比array[i]快