提问人:Bharat S 提问时间:5/6/2022 更新时间:5/6/2022 访问量:110
我们可以使用像 std::mismatch 这样的 C++ 标准算法而不是 for 循环来迭代两个等长序列吗?
Can we use C++ standard algorithm like std::mismatch instead of for loop for iterating over two equal length sequences?
问:
考虑两个向量:
vector<int> A = {1, 4, 3};
vector<int> B = {5, 7, 1};
给定两个向量的长度相等。
如果我需要在每个索引上逐个元素使用并执行操作,比如计算绝对差小于或等于给定值的索引数。3
理想情况下,基于 for 循环的实现如下所示:
int cnt{0};
for(int i{0}; i < 3; i++)
if(abs(A[i] - B[i]) <= 3)
cnt++;
}
但是,我很想使用标准函数来执行相同的操作。std::mismatch
int cnt{ 0 };
auto count_close_ones = [&](int const &a, int const &b) {
if (abs(a - b) <= 3)
cnt++;
return true;
};
std::mismatch(A.begin(), A.end(), B.begin(), count_close_ones);
有推荐吗?一方面,我使用的是标准库函数,因此不易出错。另一方面,该名称可能具有误导性。
这个问题不是针对的,只是一个例子。我也以同样的方式迭代同一向量中的一对元素,而不是两个 for 循环。mismatch
std::mistmatch
std::adjacent_find
一般来说,这是可取的吗?
答: 暂无答案
评论
std::count_if
std::ranges::zip_view