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;