元素在二维数组 c++ 中的出现次数

Number of occurrences of an element in a 2d-array c++

本文关键字:二维数组 c++ 元素      更新时间:2023-10-16

如果我得到一个 2d 数组说{{1,2},{2,3,4},{5,1,2,7}},我如何计算一个元素说1在数组中出现了多少次? 是否有任何 c++ STL 函数?

假设二维数组是嵌套的标准库容器,外部容器称为arr

auto target = 1;
auto count = std::accumulate(
std::begin(arr), std::end(arr), 0,
[target](auto a, auto const &inner) {
return a + std::count(std::begin(inner), std::end(inner), target);
}
);

(演示(

这假设 C++14 支持autolambda 参数。

如果arr的类型是int**那么这将不起作用,因为std::end()不知道每个数组的结束位置,但是尝试手动迭代该数组的内部元素时会遇到完全相同的问题。

如果这是一个"普通"的 2D 数组,其中数据存储在连续内存中,那么如果您为它在内存中提供开始和结束位置,则只需要使用 std::count。

#include <algorithm>
#include <iostream>
//...
int main()
{
const int m=10;
const int n=20;
int arr[m][n] = {0};
arr[0][0] = 1;
arr[m-1][n-1] = 1;
std::cout << "The number of 1's is " << std::count(&arr[0][0], &arr[m-1][n], 1);
}

输出:

The number of 1's is 2