【发布时间】:2020-04-06 01:55:44
【问题描述】:
我正在通过学习更好地使用标准库中的算法来提高我的 C++ 技能。我有一个问题,我不确定如何使用算法正确解决。我需要检查一个元素是否存在于向量中,如果存在,获取它的索引。
对于原始循环,我会使用一个整数并在每次迭代时递增它。
使用算法我只能使用std::find,然后使用std::distance,但这需要比原始循环更多的计算。使用算法完成这项任务的最佳方法是什么?
【问题讨论】:
-
但这需要比原始循环更多的计算 -- 你从哪里得到这些信息?
-
我很清楚它会做更多的事情。首先我迭代然后我计算距离......
-
好的,让我们看看使用循环查找元素的完整设置。请记住,索引必须在循环体外部可用,因此
for (int i..)等“技巧”将不起作用,因为i必须在循环外部可用。 -
我已经测试过了,也许我做错了什么,但看起来原始循环更便宜godbolt.org/z/HwBHDL
-
您的代码具有未定义的行为,因为
i未初始化。下一个问题是你应该把你的手写代码移动到一个函数中,看看会发生什么。你基本上是在比较一个通用函数,当给定正确的参数时,总是可以工作,并且人类确保他们所有的手动编码循环都没有错误(例如,大小错误)。