C++作为一个内存还需要自己管的语言,实现动态数组还是比较简单的。
int *p = int[len]
len在编译的时候是不定的,在new的时候才会开辟一片空间,返回指针给p
int p[len] 不行,因为C++中静态数组必须在编译的时候分配好内存空间,len不定没法分配
在java中动态数组ArrayList<> 模板可以实现动态数组类型
转自:点击打开链接 对动态数组的blog
在C++标准模版库(STL)中的vector(向量)也可以实现变长数组:
vector<int> array(len);//声明变长数组
这样用vector的迭代器就很方便的和数组一样操作了
PS:这里的变长数组让他联想到了java的java.util包中的vector和C#中的ArrayList,它们也可以在各自的语言中实现变长数组。不过C++中的vector不能像C#一样有托管的垃圾回收机制回收被占用的内存空间,但是你可以在使用完vector后调用~vector()析构函数释放内存。
多维数组:
比较麻烦~
双指针法:
首先介绍一下双指针方法,在这里双指针就是指像指针的指针,比如你可以这样声明一个数组:
int **p = new int*[num1];
而对每一个*p(一共num1个*p)申请一组内存空间:
for(int i=0; i<num1; ++i)
p[i] = new int[num2];
其中,num1是行数,num2是数组的列数。
vector:
//注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。
vector<vector<int> > vecInt(m, vector<int>(n));
表示一个名叫vecInt的 m行 每行 n个vector intlooks so danteng...