【问题标题】:Dynamically Allocated input, and output 2-D Arrays in C++C++ 中动态分配的输入和输出二维数组
【发布时间】:2018-02-28 21:50:13
【问题描述】:

我的目标是动态分配二维数组,以便提示用户输入他们想要创建的矩阵数组的行和列的大小。在动态分配行和列的大小后,用户将输入他们想要的任何值。以下是我的 C++ 代码:

#include <iostream>
using namespace std;

int main()
{

int* x = NULL;
int* y = NULL;
int numbers, row, col;
cout << "Please input the size of your rows: " << endl;
std::cin >> row;
cout << "Please input the size of your columns: " << endl;
std::cin >> col;
x = new int[row]; 
y = new int[col];
cout << "Please input your array values: " << endl;
for (int i = 0; i<row; i++)
{
    for (int j = 0; j<col; i++)
    {
        std::cin >> numbers; 
        x[i][j] = numbers;
    }
}

cout << "The following is your matrix: " << endl;
for (int i = 0; i < row; i++)
{
    for (int j = 0; j<col; j++)
    {
        std::cout << "[" << i << "][" <<j << "] = " << x[i][j] << std::endl;
    }
}

delete[] x;
delete[] y;
system("pause");
return 0;
}

不幸的是,当我在 Visual Studios 上运行此代码时,它给了我编译错误。

【问题讨论】:

  • 你想要std::vector&lt;std::vector&lt;int&gt;&gt;
  • x[ i ][ j ]? link
  • 您创建了两个一维数组,然后尝试使用它们,就好像它们神奇地连接在一起一样。去掉代码的用户 I/O 部分,集中精力学习如何构造一个二维数组。

标签: c++ arrays memory multidimensional-array dynamic-allocation


【解决方案1】:

以下是如何使用 c++11 的 new 和 delete 运算符动态分配二维数组(10 行和 20 列)

代码:

int main()
{

//Creation
int** a = new int*[10]; // Rows

for (int i = 0; i < 10; i++)
{
    a[i] = new int[20]; // Columns
}

//Now you can access the 2D array 'a' like this a[x][y]

//Destruction
for (int i = 0; i < 10; i++)
{
    delete[] a[i]; // Delete columns
}
delete[] a; // Delete Rows
return 0;
}

【讨论】:

  • 应该是delete[] a 而不是delete a。此外,我认为您应该提到使用 newdelete 已过时,应该首选 std::vectorstd::array 等容器
  • 谢谢我正在编辑它,但在 vs 2015 中,内存视图在释放后看起来有效
  • 这真的很奇怪。将所有delete[]s 替换为delete 时会显示什么?
  • @Fureeish 由于在这种情况下没有要调用的析构函数,delete[]delete 都可以与 Visual Studio 一起使用,尽管使用 delete 而不是 delete[] 这里是未定义的行为,根据语言标准。
  • @Fureeish 我很糟糕,这是由于内存查看器无法在指针的情况下自动将名称转换为其实际数据布局,我只是告诉 Visual Studio 输出“a”的 10 指针',然后是 20 个指向 'a' 的每个指针的值的指针,就像在监视窗口中这样:'a,10,20'
【解决方案2】:

我解决了:

#include <iostream>
//#include <vector>

using namespace std;

int main() {
int row, col;
cout << "Please enter the rows size: " << endl;
cin >> row;
cout << "Please enter the column size: " << endl;
cin >> col;

cout << "Please enter the numbers you want to put into a 2D array (it should 
look like a matrix graph)." << endl;
cout << "Press enter after each number you input: " << endl;

int** map = new int*[row];
for (int i = 0; i < row; ++i)
    map[i] = new int[col];

for (int i = 0; i < row; i++) {
    for (int j = 0; j < col; j++) {
        cin >> map[i][j];
    }

}

cout << endl;
//Print
for (int i = 0; i < row; i++) {
    for (int j = 0; j < col; j++) {
        cout << map[i][j] << " ";
    }
    cout << endl;

}
cout << endl;


// DON'T FORGET TO FREE
for (int i = 0; i < row; ++i) {
    delete[] map[i];
}
delete[] map;
system("pause");
return 0;
}

【讨论】:

    【解决方案3】:
    using namespace std;
    
    int
    main ()
    {
      int sum = 0;
      int *row = new int (0);
      int *col = new int (0);
    
      cout << "enter rows" << endl;
      cin >> *row;
      cout << "enter column" << endl;
      cin >> *col;
      int *array = new int[*row][*col] for (int i = 0; i < (*row); i++)
        {
          for (int j = 0; j < (*col); j++)
        {
          cout << "enter element" << endl;
          cin >> *col;
          col++;
          sum = sum + (*col);
        }
          cout << " norm is " << sum;
          sum = 0;
          row++;
        }
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-03
      • 2015-12-13
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2020-08-23
      • 2013-11-14
      相关资源
      最近更新 更多