实验三:综合练习一 给定任意简单数据类型的一维数组(长度自定义),查找数组中相异的数组元素,统计其出现的次数及数组下标值,并标准输出统计结果。用c加加实现这个代码
时间: 2025-03-20 17:12:22 浏览: 68
好的,以下是基于实验需求的C++代码实现以及解释:
### 题目分析
我们需要编写一段 C++ 程序,完成以下功能:
1. 接收一个包含简单数据类型的数组(例如整数型 `int` 数组)。
2. 查找并统计每个**唯一值**及其对应的出现次数和第一次出现在数组中的索引位置。
---
### 完整代码示例
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
void countDistinctElements(const vector<int>& arr) {
// 使用 unordered_map 存储数据:key 为数组元素,value 是 pair<首次出现的位置, 出现次数>
unordered_map<int, pair<int, int>> elementInfo;
for (size_t i = 0; i < arr.size(); ++i) { // 遍历整个数组
if (elementInfo.find(arr[i]) == elementInfo.end()) {
// 如果当前元素还没有记录过,则插入 map 中
elementInfo[arr[i]] = make_pair(i, 1); // 第一次出现,计数值设为 1
} else {
// 若已存在该元素,则只增加计数值
elementInfo[arr[i]].second += 1;
}
}
// 输出统计结果
cout << "统计结果:" << endl;
for (const auto& entry : elementInfo) {
cout << "数字: " << entry.first
<< ", 下标: " << entry.second.first
<< ", 次数: " << entry.second.second << endl;
}
}
int main() {
// 示例数组
vector<int> data = {4, 5, 6, 7, 8, 9, 5, 6, 7, 4};
// 调用函数进行统计
countDistinctElements(data);
return 0;
}
```
---
### 功能说明
#### 输入部分
我们通过 `std::vector<int>` 来存储输入数组的数据。用户可以根据需要自行修改数组内容。
#### 核心算法
- 利用了 STL 的容器 **`unordered_map`** 来高效地查找、插入和更新键值对信息。
- 对于每一个遍历到的元素:
- 如果它尚未存在于 `unordered_map` 中,则将其加入,并将它的初始下标和出现次数存入对应结构体;
- 否则仅递增其出现次数即可。
#### 输出部分
程序会按顺序输出所有不同值的信息,包括它们的原始下标与总的频率。
---
### 测试运行
假设输入数组为 `{4, 5, 6, 7, 8, 9, 5, 6, 7, 4}` ,运行上述代码得到的结果可能是这样的:
```
统计结果:
数字: 4, 下标: 0, 次数: 2
数字: 5, 下标: 1, 次数: 2
数字: 6, 下标: 2, 次数: 2
数字: 7, 下标: 3, 次数: 2
数字: 8, 下标: 4, 次数: 1
数字: 9, 下标: 5, 次数: 1
```
---
阅读全文