// 下面是一段实现题目要求功能的 C++ 代码:
// 本代码使用了 C++ 中的 STL 容器 `vector` 来保存数组,并将函数参数类型改为了 `vector<int>`。在函数中,可以直接使用 `arr.size()` 获取容器中元素个数。打乱下标顺序后,将下标顺序存储在另一个 `vector<int>` 容器中,作为函数返回值返回。
// 需要注意的是,在使用完动态申请的的 `vector<int>` 后,其内存会在函数返回时自动释放,无需手动释放。
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
// 定义打乱下标顺序的函数
std::vector<int> shuffleIndex(std::vector<int> arr)
{
// 获取容器中元素个数
int arrLength = arr.size();
// 定义一个新的下标容器
std::vector<int> indexArr(arrLength);
// 初始化下标顺序数组:[0, 1, ..., arrLength-1]
for (int i = 0; i < arrLength; i++) {
indexArr[i] = i;
}
// 随机交换下标顺序数组元素的位置
srand(time(NULL)); // 设置随机种子
for (int i = arrLength - 1; i >= 1; i--) {
int j = rand() % (i + 1); // 生成随机数 j,满足 0 <= j <= i
int temp = indexArr[i]; // 交换下标顺序数组中 i 和 j 位置处的元素
indexArr[i] = indexArr[j];
indexArr[j] = temp;
}
// 返回下标容器
return indexArr;
}
int main()
{
// 定义容器
std::vector<int> arr{123, 223, 323, 423, 523, 623, 723, 823, 923, 1023};
// 调用函数打乱下标顺序,并获取返回值
std::vector<int> indexArr = shuffleIndex(arr);
// 打印打乱后的容器元素
std::cout << "Shuffled array:";
for (auto idx : indexArr) {
std::cout << "arr["<< idx << "] " << arr[idx];
}
std::cout << std::endl;
return 0;
}