gpt4 book ai didi

c++ - 如何使用基本循环创建二维数组矩阵

转载 作者:行者123 更新时间:2023-11-30 05:40:37 25 4
gpt4 key购买 nike

目前我正在尝试使用以下声明创建一个稀疏矩阵:

typedef int Data;

struct Element
{
int i;
int j;
Data value;
};

我允许用户输入他们想要的行数:

int size;

cout << "Enter the number of element: ";
cin >> size;

// Function to construct sparse matrix
constructSparseMatrix(size,3);

我对 constructSparseMatrix 函数的尝试:

void constructSparseMatrix(int row, int col) {
int** arr = new int*[row];
for(int i = 1; i <= row; i++) {
arr[i] = new int[col];
cout << arr[row][col];
}

}

但是当我输入任何数字时,应用程序除了停止工作外什么也没有输出。如果我输入 2,我的预期输出看起来像这样:

Insert (1 ,2, 3)
Insert (4, 5, 6)

有人能指出我正确的方向吗?也许这很容易,但我对 C++ 有点陌生,所以请原谅我的无知。

最佳答案

您收到的段错误是由这一行引起的:

cout << arr[row][col];

在这种情况下,rowcol是矩阵的维度,因此元素来自 0row - 1来自 0col - 1 .当您访问 arr[row][col]你越界访问元素。

更不用说你的 for循环也越界:

for(int i = 1; i <= row; i++) {

将从1开始而不是 0 .

正确的函数看起来更像:

int** constructSparseMatrix(int row, int col) {
int** arr = new int*[row];
for(int i = 0; i < row; i++) {
arr[i] = new int[col];
for (int k = 0; k < col; k++)
arr[i][k] = /* initialize element (i, k) */;
}
return arr;
}

Live demo

最后,我要推荐一本关于 C++ 的好书。很明显,您缺少很多 C++ 的基础知识。 newdelete是非常高级的主题。我建议从 std::array 开始, std::vectorstd::map相反。


稀疏矩阵通常不是用 NxM 元素的实际矩阵(数组)实现的;用于密集矩阵(其中大多数元素不同于 0 )。

一个可能的实现是使用 std::map<std::pair<int, int>, element> ,您可以在其中将 2D 索引映射到特定元素。对于其他可能的实现,请查看 this page .

一个更简单的替代方法是使用 Boost.uBLAS提供各种矩阵。

关于c++ - 如何使用基本循环创建二维数组矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31546195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com