数组大小必须是常量,常量的形式可以是数值,const关键字修饰的变量,或者是宏定义
#define LEN 10 //一维数组 int arr1[10]; const int SIZE = 10; int arr2[SIZE]; int arr3[LEN]; //二维数组 int arr4[3][4]; int arr5[SIZE][LEN];
动态数组的大小不需要申明时就指定大小,可以通过动态内存分配
//一维数组 int len = 10; int* ptr1 = new int[len]; //二维数组 int row = 3; int col = 4; int** ptr2 = new int* [row]; for (int i = 0; i < row; i++) { ptr2[i] = new int[col]; }
vector底层是通过数组实现的,支持增删改查各种操作,最大的特点是数组大小可以不用一开始就指定同时还支持动态扩容
//一维vector int sz = 10; vector<int> vec1; vector<int> vec2(10); vector<int> vec3(sz); //二维vector vector<vector<int>> _vec1;
//静态数组 int arr1[6]; //数组的值未定义 int arr2[6] = {1,2}; //数组前两位为1,2,后面的全为0 int arr3[6]; //数组的值等于它的下标 for (int i = 0; i < 6; i++) arr3[i] = i; cout << "打印静态数组" << endl; print2(arr1, 6); print2(arr2, 6); print2(arr3, 6); //动态数组 cout << "打印动态数组" << endl; int* ptr1 = new int[6]{ 1,2 }; //数组前两位为1.2.后面的全为0 int* ptr2 = new int[6]; //数组的数为其下标 for (int i = 0; i < 6; i++) ptr2[i] = i; print2(ptr1, 6); print2(ptr2, 6); //二维数组 //静态数组 int _arr1[3][4]; //数组的值未定义 int _arr2[3][4] = { {1,2} ,{3} }; //数组第0行为1 2 0,0.第1行为3 0 0,0.第2行为0 0 0,0 int _arr3[3][4]; //数组第0行为0,1,2,3,。第1行为3,4,5,6.第三行为6,7,8,9 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { _arr3[i][j] = i * 3 + j; } } cout << "打印二维静态数组" << endl; print(_arr1, 3); print(_arr2, 3); print(_arr3, 3); //动态数组 int row = 3; int col = 4; int** _ptr1 = new int*[row]; for (int i = 0; i < row; i++) _ptr1[i] = new int[col]; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) _ptr1[i][j] = i * row + j; } cout << "打印二维动态数组" << endl; print3(_ptr1, row, col); //vector vector<int> vec1; //空vector vector<int> vec2{ 1,2 }; //vector大小为2,元素为1,2 vector<int> vec3(6,1); //vector大小为6.元素都为1 cout << "打印一维vector" << endl; printVec1(vec1, 0); printVec1(vec2, 2); printVec1(vec3, 6); cout << "打印二维vector" << endl; vector<vector<int>> _vec1; //空vector vector<vector<int>> _vec2{ {1,2},{3}}; vector<vector<int>> _vec3(3,vector<int>(4,1)); printVec2(_vec1); printVec2(_vec2); printVec2(_vec3);