如何实现C++用户自定义二维数组的随机整数填充函数
解决动态二维数组填充随机整数的问题
首先得提一句:你当前代码里的int array1[i][o];是变长数组(VLA),这并不是C标准的一部分——虽然有些编译器(比如GCC)会提供扩展支持,但这种写法移植性很差,而且容易出现内存管理问题。更符合C规范的做法是用std::vector来创建动态二维数组,我们基于这个来实现填充函数。
下面是完整的实现方案:
完整代码示例
#include <iostream> #include <ctime> #include <vector> // 必须包含这个头文件来使用vector using namespace std; // 完成你开头的填充函数:接收行列数和二维vector的引用,填充随机整数 void fill_array(int rows, int cols, vector<vector<int>>& arr) { // 先初始化随机数生成器,只需要在程序启动时调用一次 static bool initialized = false; if (!initialized) { srand(time(nullptr)); initialized = true; } // 遍历每一行每一列,填充随机数(这里示例是0到99的整数,你可以按需调整范围) for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { arr[i][j] = rand() % 100; } } } int main() { int rows, cols; cout << "Ingress rows: "; cin >> rows; cout << "Ingress columns: "; cin >> cols; // 用vector创建动态二维数组,初始化所有元素为0 vector<vector<int>> array1(rows, vector<int>(cols)); // 调用填充函数 fill_array(rows, cols, array1); // 可选:打印数组验证结果 cout << "\nGenerated array:\n"; for (const auto& row : array1) { for (int num : row) { cout << num << "\t"; } cout << "\n"; } return 0; }
关键细节说明
- 为什么用vector?:vector会自动管理内存,避免手动
new/delete的内存泄漏问题,而且完全符合C++标准,移植性拉满。 - 随机数初始化:把
srand(time(nullptr))放在函数里用static变量控制只执行一次,避免多次调用函数导致随机数重复(如果在循环里多次调用fill_array的话)。 - 函数参数:用
vector<vector<int>>& arr传递引用,避免拷贝整个数组,提升效率。
如果你坚持要用原生数组(不推荐),那需要用动态分配的方式,比如int** array1 = new int*[rows];然后每行再分配内存,但这种写法需要手动释放内存,容易出错,还是vector更省心。
内容的提问来源于stack exchange,提问作者Nehuy
相关产品推荐
相关产品推荐

