一、一维数组
- 静态 int array[100]; //定义了数组array,并未对数组进行初始化
- 静态 int array[100] = {1,2}; //定义并初始化了数组array
- 动态 int* array = new int[100]; delete []array; //分配了长度为100的数组array
- 动态 int* array = new int[100](1,2); delete []array; //为长度为100的数组array初始化前两个元素
二、二维数组
- 静态 int array[10][10]; //定义了数组,并未初始化
- 静态 int array[10][10] = { {1,1} , {2,2} }; //数组初始化了array[0][0,1]及array[1][0,1]
- 动态 int (*array)[n] = new int[m][n]; delete []array;
- 动态 int** array = new int*[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; //多次析构
- 动态 int* array = new int[m][n]; delete []array; //数组按行存储
三、多维数组
- int* array = new int[m][3][4]; 只有第一维可以是变量,其他维数必须是常量,否则会报错
- delete []array; 必须进行内存释放,否则内存将泄漏
四、通过STL容器 <vector> 声明数组
- 第一种方法
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N); //定义二维动态数组大小5行
for(int i =0; i< obj.size(); i++){ //动态二维数组为5行6列,值全为0
obj[i].resize(M); //指定二维数组大小为obj[i][M]
}
for(int i=0; i< obj.size(); i++){ //输出二维动态数组
for(int j=0; j < obj[i].size(); j++){
cout << obj[i][j] << " ";
}
cout << "\n";
}
return 0;
}
- 第二种方法
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
for(int i=0; i< obj.size(); i++){ //输出二维动态数组
for(int j=0; j < obj[i].size(); j++){
cout << obj[i][j] << " ";
}
cout << "\n";
}
return 0;
}
五、动态数组初始化
1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。
2. 对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:
int *pia1 = new int[10]; // 每个元素都没有初始化
int *pia2 = new int[10](); // 每个元素初始化为0
3. 字符类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:
string *psa1 = new string[10]; // 每个元素调用默认构造函数初始化
string *psa2 = new string[10](); // 每个元素调用默认构造函数初始化