繁体   English   中英

使用迭代器和索引访问向量元素有什么区别?

[英]What is the difference between accessing vector elements using an iterator vs an index?

使用迭代器和索引访问向量元素有什么好处?

为什么迭代器比索引更好?

  • 在索引不可用的情况下(例如,使用std :: list)。
  • 在调用接受迭代器的泛型函数的情况下。
  • 编写应该使用多种容器类型的函数模板时。
  • 它们的存在是为了在所有容器之间创建一致性 ,并且能够使用所有容器的迭代器以及所有标准算法中的常规指针。
  • 迭代器可以指向除了作为概念之外不存在的序列。 例如,您可以创建一个迭代器类,该类遍历素数而不必实际构建素数容器。

但是,如果忽略不支持随机访问(列表,集等)的容器类型,迭代器仍然提供

  • 像语义一样的指针(想想string :: iterator与char *)。
  • 广义概念可用于迭代超过容器内的元素。
  • 在少数情况下,性能优于容器成员功能。

模块化就是答案。 假设你将逻辑包装在一个函数调用中(一个好的做法)。 在这种情况下,使它接收迭代器将使它成为通用的,这样它就可以在C样式数组(指针),C ++ stl向量或任何真正表现得像迭代器容器的东西上运行,例如链接列表。

我说它跨容器的可移植性。

如果使用向量编写代码并使用索引进行迭代,则以后不能轻易地将代码更改为其他容器。

typedef std::vector<int> myContainer; //only change here for std::list 

for ( myContainer::iterator iter = actualContainer.begin();
      iter != actualContainer.end(); 
      ++iter)
{}

在上面的代码中,如果要从向量更改为列表,则很容易实现。 如果您使用过该索引,那么就无法实现。

否则,因为向量使用随机访问迭代器,所以它应该是相同的。 (索引或迭代器一切正常)

我最近询问了有关表现的问题。 你可能想看看我得到的答案。

检查以下链接: 迭代器与索引

讨论主要是关于性能,结果是平台相关的,每个平台都有微小的变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM