c++ - 不使用 count() 将一个数组的每个元素的计数赋给另一个数组的每个元素

标签 c++ arrays

基本上我有两个 int 数组,S[N],它包含 M 个元素的 N 个实例,可能包含也可能不包含重复元素,以及 Sr[M],我想用每个元素的实例数量填充它S[N] 的元素。例如,如果输入是:

10 5
1 2 3 4 1 5 1 5 2 1

然后 N = 10,M = 5,

S[10] = { 1, 2, 3, 4, 1, 5, 1, 5, 2, 1 }

Sr[5] = { 4, 2, 1, 1, 2 } // 4 instances of the number 1, 2 instances of the number 2, 1 instance of the number 3 and so on.

到目前为止,我已经使用了这段代码:

#include <fstream>
#include <algorithm>
using namespace std;

int main()
{
int N, M;

ifstream input;
input.open("aris.in");
input >> N >> M;

int S[N], Sr[M];
for (int i = 0; i < N; ++i)
{
    input >> S[i];
}
input.close();

for (int i = 0; i < M; ++i) {
    Sr[i] = count(S, S+N, i+1);
}

return 0;
}

如何在不使用算法库中的 count() 函数的情况下获得相同的结果?

最佳答案

首先,C++ 不支持可变长度数组。因此,您要么动态分配数组,要么使用标准容器 std::vector

无论您将使用循环的哪个容器都可以如下所示

for ( int i = 0; i < N; ++i ) {
    ++Sr[S[i]-1];
}

当然一开始Sr的每个元素都必须设置为0。

我还假设 S 的值从 1 开始。

关于c++ - 不使用 count() 将一个数组的每个元素的计数赋给另一个数组的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797923/

相关文章:

java - 数组索引位置中的元素

arrays - 合并嵌套的 Yaml 数组

c++ - `-1.$e+000` 是什么意思?

c++ - 如何从数组中删除一个元素并将所有元素向上移动一个位置?

C++ pthread'ed 进程运行速度比单线程问题慢

python - 如何扫描以前的列表值以添加新的复合列表值?

c++ - 设计: Exposing common functionality to two different classes

c++ - 我想在空 tableWidget 中添加带有文本的新项目

JavaScript 按位与运算符

javascript - 如何将对象迭代到平面列表中 - react native ?