PS:更多数据结构的用法详见:
数组的申明
静态数组
数组大小必须是常量,常量的形式可以是数值,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底层是通过数组实现的,支持增删改查各种操作,最大的特点是数组大小可以不用一开始就指定同时还支持动态扩容
//一维vector
int sz = 10;
vector<int> vec1;
vector<int> vec2(10);
vector<int> vec3(sz);
//二维vector
vector<vector<int>> _vec1;
数组的初始化和赋值
代码中涉及到一维二维数组作为函数参数,详细用法请见:
另外还有函数重载的知识,详细用法请见:
#include <iostream>
#include<vector>
using namespace std;
#define LEN 10
void print(int arr[], int a)
{
for (int i = 0; i < a; i++)
cout << arr[i] << " ";
cout << endl << endl;
}
void print(int arr[][4], int a)
{
for (int i = 0; i < a; i++)
{
for (int j = 0; j < 4; j++)
cout << arr[i][j] << " ";
cout << endl;
}
cout << endl << endl;
}
void print(int** ptr, int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
cout << ptr[i][j] << " ";
cout << endl;
}
cout << endl << endl;
}
void printVec(vector<int> vec, int size)
{
for (int i = 0; i < size; i++)
cout << vec[i] << " ";
cout << endl << endl;
}
void printVec(vector<vector<int>> vec)
{
int row = vec.size();
if (row == 0)
return;
for (int i = 0; i < row; i++)
{
int col = vec[i].size();
for (int j = 0; j < col; j++)
cout << vec[i][j] << " ";
cout << endl;
}
cout << endl << endl;
}
int main()
{
//数组的定义
//静态数组
int arr1[6]; //默认全是0
int arr2[6] = {1,2}; //数组前两位为1,2,后面的全为0
int arr3[6]; //数组的值等于它的下标
for (int i = 0; i < 6; i++)
arr3[i] = i;
cout << "打印静态数组" << endl;
print(arr1, 6);
print(arr2, 6);
print(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;
print(ptr1, 6);
print(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;
print(_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;
printVec(vec1, 0);
printVec(vec2, 2);
printVec(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));
printVec(_vec1);
printVec(_vec2);
printVec(_vec3);
}