C++ 在进入主功能之前进行输入

C++ 在进入主功能之前进行输入,c++,arrays,global-variables,C++,Arrays,Global Variables,我试图全局声明一个二维数组,其行数和列数留给用户输入。我已经试了一个小时了,但找不到任何办法。帮帮我 #include<iostream> using namesapce std; int m,n,array[m][n]; int main() { cin>>m>>n; . . . } 我想把变量m&n的输入值反映到我的原始数组中,怎么办? 而且,在实现上述代码时,它给出的错误界不是一个整数常量 谢谢让我们将这个全局函数定义为int*

我试图全局声明一个二维数组,其行数和列数留给用户输入。我已经试了一个小时了,但找不到任何办法。帮帮我

#include<iostream>
using namesapce std;
int m,n,array[m][n];
int main()
{
   cin>>m>>n;
   .
   .
   .
}
我想把变量m&n的输入值反映到我的原始数组中,怎么办? 而且,在实现上述代码时,它给出的错误界不是一个整数常量


谢谢

让我们将这个全局函数定义为int**array,然后在main函数中为array动态分配内存

#include <iostream>
using namespace std;
int** array;

int main()
{
    int xSize;
    int ySize;
    cin >> xSize;
    cin >> ySize;

    int** array = new int*[xSize];
    for(int i = 0; i < xSize; ++i)
    {
        array[i] = new int[ySize];
    }

    return 0;
}

为了静态分配多维数组,必须在编译时知道维度

因为直到运行时才知道维度,所以需要使用动态内存分配

< > C++中有很多种动态分配多维数组的方法,我认为它们都不完全令人满意。由于这是一个C++问题,我将集中于C++答案,而不是C,并在可能的情况下使用RAII类型和标准库容器。 Boost.Multi-Array 我认为最好的选择是使用boost库:

#include <iostream>
#include "boost/multi_array.hpp"

int main() {
  int m;
  int n;

  std::cin >> m >> n;

  boost::multi_array<int, 2> array(boost::extents[m][n]);
}
但您需要转换为单个索引才能访问元素

单个向量和指针数组 另一种选择是分配一个向量以连续存储数据,然后分配第二个指针向量以提供多维数组语法

std::vector<int> array_data(n*m);
std::vector<int*> array(n);
for (int i = 0; i != n; ++i)
  array[i] = array_data.data() + m*i;

这应该是相对有效的,但需要一些额外的设置。您还失去了标准库容器在内部尺寸上的优势。

您无法做到这一点。使用任何动态内存分配技术,C和C++是不同的语言!不要为C++代码添加C标记。对于错误消息:它确切地告诉你问题是什么。想想看,为什么投了反对票?仅仅因为一个问题显示出缺乏理解并不意味着它是一个坏问题。另一种方法是分配一个连续的块:newint[xSize*ySize]@PatrykZglenicki如果您创建一个单独的指针数组来索引到一个连续的块中,您可以这样做。我认为提供包含new而不删除的答案是不好的。谢谢您:非常有帮助!
std::vector<int> array(m*n);

array[13+n*21] = 7;
std::vector<int> array_data(n*m);
std::vector<int*> array(n);
for (int i = 0; i != n; ++i)
  array[i] = array_data.data() + m*i;