gpt4 book ai didi

c++ - 有效地将 std::vector 的所有元素与同一 vector 中的所有其他元素进行比较

转载 作者:太空狗 更新时间:2023-10-29 22:59:37 25 4
gpt4 key购买 nike

我是 C++ 新手。

我试图找到如何遍历 vector 以将每个元素与其他所有元素进行比较,其中比较顺序无关紧要;

(a 'compared to' b) = (b 'compared to' a)

因此检查一个意味着您不需要将每个值与其他每个值进行比较,只需将剩余的值进行比较即可。

我有类似这个 TOY 算法的东西;

#include <vector>

typedef std::vector<double> vector_t;

int countTheFoo(const vector_t &v)
{
int fooFound {0};
for (auto it1 = v.begin(); (it1 != v.end()); it1++)
{
for (auto it2 = it1.next(); (it2 != v.end()); it2++)
{
if testForFoo(*it1, *it2)
{
// Woot! Found some...
fooFound++;
}
}
}
return fooFound;
}

vector_t foo { 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0 };

int numFoo {countTheFoo(foo)};

我实际上是在比较线以找到不与简单 double 相交的线,但技术是相同的。

这是;

for (auto it2 = it1.next(); (it2 != v.end()); it2++)

我认为使用 lambda 可以更有效地完成的部分。

这种方法可行,但是;

  • 这是执行此类迭代的最有效方法吗?

  • 可以使用 std::for_all() 作为 lambda 完成吗?

谢谢。

最佳答案

没有。您不需要测试 (it1 != it2) 因为根据您在 it2 上的循环定义,it2 将始终大于it1。如果您从代码中删除该短语,效率将会提高。

可能可以使用std::for_all,但不清楚这是否会提高代码的效率。

关于c++ - 有效地将 std::vector 的所有元素与同一 vector 中的所有其他元素进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com