为了账号安全,请及时绑定邮箱和手机立即绑定

请问 为什么使用迭代器而不是数组索引?

请问 为什么使用迭代器而不是数组索引?

白衣非少年 2019-09-02 13:04:18
为什么使用迭代器而不是数组索引?使用以下两行代码:for (int i = 0; i < some_vector.size(); i++){     //do stuff}这是:for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();     some_iterator++){     //do stuff}我听说第二种方式更好。这到底是为什么?
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

只有当vector.size()是一个快速操作时,第一个表单才是有效的。这对于向量是正确的,但对于列表就不是这样。另外,您计划在循环的主体内做什么?如果您计划访问元素,如

T elem = some_vector[i];

然后假设容器有operator[](std::size_t)定义。同样,对于向量也是如此,但对于其他容器则不是这样。

迭代器的使用使您更接近于容器独立性。你不是在假设随机存取能力或者快速size()操作,只有容器具有迭代器功能。

您可以通过使用标准算法进一步增强代码。根据你想要达到的目标,你可以选择使用std::for_each()std::transform()诸若此类。通过使用标准算法而不是显式循环,您将避免重新发明车轮。您的代码可能更高效(如果选择了正确的算法)、正确和可重用。




查看完整回答
反对 回复 2019-09-03
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

这是现代C+灌输过程的一部分。迭代器是迭代大多数容器的唯一方法,所以即使使用向量,也是为了让自己进入正确的心态。说真的,这是我这么做的唯一原因-我想我从来没有用另一种容器代替过向量。


哇,三周后投票还是被否决了。我想有点开玩笑是不划算的。


我认为数组索引更具可读性。它与其他语言中使用的语法以及用于老式C数组的语法相匹配。也不那么冗长。效率应该是一个清洗,如果你的编译器是好的,而且几乎没有任何情况下,它是重要的。

即使如此,我仍然发现自己经常使用向量迭代器。我相信迭代器是一个重要的概念,所以我会尽可能地推广它。



查看完整回答
反对 回复 2019-09-03
?
PIPIONE

TA贡献1829条经验 获得超9个赞

我将在这里成为魔鬼的提倡者,而不是推荐迭代器。主要原因是,我从桌面应用程序开发到游戏开发的所有源代码都有我也不需要使用迭代器。一直以来,它们都是不需要的,其次,隐藏的假设和代码混乱,以及迭代器带来的调试噩梦,使它们成为不需要速度的应用程序中使用它的最佳例子。

即使从主站的角度看,他们也是一团糟。这并不是因为他们,而是因为在幕后所发生的所有别名。我怎么知道您还没有实现自己的虚拟向量或数组列表,这与标准完全不同。我知道运行时当前的类型是什么吗?你是否超载了一个操作员,我没有时间检查你所有的源代码。我知道你用的是什么版本的STL吗?

迭代器的下一个问题是漏抽象,尽管有许多网站与它们进行了详细的讨论。

对不起,我没有也仍然没有看到迭代器有任何意义。如果他们把清单或向量从你身边抽象出来,而实际上你应该已经知道了你要处理的是什么向量或清单,如果你不知道,那么你就会为将来的一些伟大的调试会议做好准备。




查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 454 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信