给出一对等长阵列。 。
void someFunc (const float **inputChannelData)
{
const float* L = inputChannelData[0];
const float* R = inputChannelData[1];
...
我可以看到使用std::count
计算常量值的出现次数非常容易。 。
std::count(L, L+someIntegerOffset, 0.0f)
...但是是否有一个标准算法(或成语)计算两个数组中相同值的元素(每个数组中的相同索引)数量?
Matlab等效项看起来像sum(L==R)
答案 0 :(得分:4)
std::count
的谓词形式为std::count_if
,documentation表示它通过左值获取参数。
所以我相信我可以将一个捕获两个数组的lambda混合在一起,从& arg获取距离/索引,然后检查两个值。我怀疑我会这样使用它,而不是老式的循环。
答案 1 :(得分:1)
您可以使用zip
来查看Sequence-zip function for c++11?
然后使用谓词count_if
,该元组只有相同的元素。
此外,您可以简单地创建对的数组并执行相同的操作。
这样的事情可以用于计数。
void someFunc(const float** inputChannelData, size_t offset)
{
const float* R = inputChannelData[0];
const float* L = inputChannelData[1];
std::vector<std::pair<int, int>> pairs;
std::transform(L, L + offset, R, std::back_inserter(pairs),
[](float l, float r)
{
return std::make_pair(l, r);
});
size_t equal_pairs = std::count_if(pairs.begin(), pairs.end(),
[](const std::pair<float, float>& p)
{
return p.first == p.second;
});
}