目录
C++动态数组的方法: ①new②vector等容器③allocate方法
C语言动态数组的两种方法:
①C99 变长数组实现动态数组,老版本不行
int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ printf("%d\t",a[i]); }
②calloc、realloc、malloc创建动态数组
calloc: (类型说明符*) calloc(n,size);
功能:在内存的动态存储区中分配n块长度size字节的连续区域
realloc: (类型说明符*) realloc(void *p,int size);
功能:重新分配堆上的void指针p(可以将void*理解为任意类型的指针变量类型)所指的空间,使其长度为size个字节,同时会复制原有内容到新分配的堆上存储空间。
molloc,calloc两个函数的区别:
在于molloc申请的是一块size空间,而calloc可以指定申请的块数,即n块size空间
int *p=NULL,*new_p=NULL,size,new_size; scanf("%d",&size); p=(int*)calloc(size,sizeof(int)); if(NULL==p){ perror("calloc"); exit(1); } for(int i=0;i<size;i++){ scanf("%d",&p[i]); } for(int i=0;i<size;i++){ printf("%d\t",p[i]); } printf("\n"); new_p=(int*)realloc(p,2*size*sizeof(int));//扩大两倍 // new_p=(int*)realloc(p,2); if(NULL==new_p){ perror("realloc"); exit(1); } //主食到下面3行,便可测试是否自动初始化新开辟的空间 // for(int i=0;i<2*size;i++){ // scanf("%d",&new_p[i]); // } for(int i=0;i<2*size;i++){ printf("%d\t",new_p[i]); } printf("\n"); free(p); //不用free掉新开辟的空间,因为新开辟的空间是围绕着旧的空间开辟的 //实质就是在p的空间后面再开辟一倍的大小 // free(new_p);//如果释放会出现double free问题
C++动态数组的方法: ①new②vector等容器③allocate方法
①new:
//动态数组 new int *p,*q; p = new int[5];//int[5]表示一个有5个元素的指针数组s q = new int(8);//表示分配一个int空间并初始化为8
C++ 动态数组(new)_NGC_2070的博客-CSDN博客_c++ 动态数组
②vector:
值得一提的事:我目前还没有找到或者自己做出可以在二维数组中动态分配插入数据的代码:即两个for循环和cin>>a[i][j],用push_back();也不行
#if 0 vector<vector<int> > v{{1,2,3},{2,1,3},{3,2,1}}; #endif #if 1 //动态二维数组 vector<vector<int> >v; //定义二维数组的行为3 v.resize(3); for(int i=0;i<3;i++){ //定义二维数组的列的空间大小为3 v[i].resize(3); } #endif #if 0 vector<vector<int> >v(9);// m表示二维数组初始化大小 v.size(),并不是初始值 //给二维数组赋值,利用push.back() for(int i=0;i<3;i++){ v[i].push_back(1); v[i].push_back(4); v[i].push_back(9); } #endif #if 1 //双重for循环直接遍历 for(int i=0;i<3;i++){ for(int j=0;j<3;j++) cout<<v[j].at(j)<<" "; cout<<endl; } #endif #if 0 vector<vector<int> > v = {{1,2}, {3,4}}; for (const auto& inner : v) { for (const auto& item : inner) { cout << item << " "; } cout<<endl; } cout << endl; #endif
C++的二维vector和C的二维数组学习 - 掘金 (juejin.cn)
③allocate方法:
T*allocate(size_t n);分配足够的存储空间来存储T的n个实例,并返回指向它的指针