0

给定一对等长数组。.

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)

4

2 回答 2

4

std::count有一个谓词形式std::count_if文档建议它通过左值获取参数。

所以我相信我可以将一个捕获两个数组的 lambda 组合在一起,从 &arg 获取距离/索引,然后检查两个值。我怀疑我会以这种方式使用它,而不是老式的 for 循环。

于 2013-06-06T10:57:42.307 回答
1

你可以使用zip这个,看这里C++11 的 Sequence-zip 函数?

然后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;
   });
}
于 2013-06-06T10:57:34.753 回答