如何定义一个未知长度的定长二维数组


我想要定义一个定长的整型二维数组,但是此数组有多少行多少列在运行时才能知道,如果我直接写一个定义int arrInt[n][n],则报错说是必须提供const值。

于是,我想到了vector。一维的情况,用vector<int> vecInt;就可以了。但是如何定义一个二维的容器呢,或者说是容器的容器,vector的vector?

比如我这么写,就报错了:
int i,j,k=0;
vector<vector<int>> vecInt;
for (i = 0; i <= 4; i++)
for (j = 0; j <= 4; j++)
vecInt.push_back(i+j);
k = vecInt[i][j];

16 个解决方案

#1


二维数组必须定义后一维的值。
比如int a[i][j] 就必须指定j的值 ,i的值可以不指定!

#2


即便i的值可以不指定,问题的关键是对于定义数组比如int arrInt[N],这个N必定是一个const型的变量。但是我在写代码的时候,不知道用户会输入一个多大的值,所以无法在代码中定义常量,比如const int N =?;不知道这个N等于多少,在设计时是不知道的。

#3


用堆数据

#4


堆数据?
不懂,英文名字叫什么?

#5


cin>>m>>n;
float **a;
a=new float[m];
for(int i=0;i<n;i++)
   *(a+i)=new float[n];

#6


cin>>n;
vetor<int> *a;
a=new vector<int> [n];

#7


支持supperholly.这只能用动态内存分配了,也就是堆内存分配了,c++专用的是new和delete,c语言里面是用malloc和free,不过要注意在程序执行完之后一定要把内存释放出来,否则错误就大了,可以这样释放delete[]a,这里假设a是你建立的数组,

#8


cin>>m>>n;
vector<vector<int> > vecInt(m, vector<int>(n));
for (i = 0; i <= 4; i++)
for (j = 0; j <= 4; j++)
vecInt[i][j] = theValueYouWant;
k = vecInt[i][j];

#9


cin>>m>>n;
vector<vector<int> > vecInt(m, vector<int>(n));
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
vecInt[i][j] = theValueYouWant;
k = vecInt[i][j];

#10


to superholly:
谢谢superholly,不过我在VC环境中试了一把,你给出的第一个方案有问题。
a = new float[m];
//error C2440: '=' : cannot convert from 'float *' to 'float ** '

第二个方案过了。即:
cin >> n;
typedef vector<int> VecInt;
VecInt* a = new VecInt[n]

#11


to  abitz(阿奈) :
我在VC中实现如下 :
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int i,j,k,m,n;
cout << "input value for m,n:";
cin>>m>>n;
vector<vector<int>> vecInt(m, vector<int>(n)); //*
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
vecInt[i][j] = i+j; //*
k = vecInt[i-1][j-1]; //*
return 0;
}
编译后 ,被告之上边注释中跟*号的行都有错误。
你能进一步解释一下吗?

#12


一维模拟二维,我总是这样干的,没有令人头痛的编译错误了

#13


to  yeyu269() ;
你是粘贴的吗?我没写错,你把vector<vector<int> > 写成了vector<vector<int>> ,
这里两个>之间要有空格,不然会被识别成 operator >>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int i,j,k,m,n;
cout << "input value for m,n:";
cin>>m>>n;
vector<vector<int> > vecInt(m, vector<int>(n)); //*
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
vecInt[i][j] = i+j; //*
k = vecInt[i-1][j-1]; //*
return 0;
}

#14


不过也是啊,只要自己将横纵坐标做一下计算就可以了。

#15


int n=0;
……
输入n的值
int * array = new int [n*n];
// 则:array[i*n+j]相当于array[i][j],
// 简单又方便:)

#16


to  abitz(阿奈) :
是我弄错了,我在写代码的时候的确是把vector<vector<int> > 写成了vector<vector<int>> ,不好意思!

我又试了一下,你是对的,谢谢!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: