C++动态数组再总结

简介:

动态数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。

1.变长一维数组


实现变长数组最简单的是变长一维数组,你可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
//文件名:array01.cpp
 
#include<iostream>
using namespace std;
int  main(){
int  len;
cin>>len; //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
 
int *p= new  int [len]
 
;...........delete[]p;
return0;
}

注意int*p=newint[len];这一句,你不能这样做:int p[len];C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。

而且这样也不行:
int p[]=new int[len];

编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int*p=new int[len];

array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。


当然使用C++标准模版库(STL)中的vector(向量)也可以实现变长数组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//文件名:array02.cpp
 
#include<iostream>
#include<vector>
using namespace std;
 
int  main(){
 
int   len;
cin>>len;
vector< int >array(len); //声明变长数组
for ( int  i= 0 ;i<len;i++)
array[i]=i;
cout<<array[i]<< "\t" ;
}
 
return0;
}

2.动态指针数组


在构造函数中分配空间:
arr = new TYPE*[size];
for(int k=0; k<size;k++)
  arr[k] = new TYPE;
在析构函数中回收资源:
for(int k=0;k<size; k++)
  delete arr[k];
delete []arr; 

再来一个示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int  main()
{
  int  ** arr;
  arr =  new  int * [ 3 ];
  for  ( int  k= 0 ; k< 3 ; k++)
  {
   arr[k] =  new  int ;
   cin>>*arr[k];  
  }
  for  ( int  k= 0 ; k< 3 ; k++)
   cout<<*arr[k]<< " " ;
  cout<<endl;
 
  for  ( int  k= 0 ; k< 3 ; k++)
   delete arr[k];
  delete []arr;
 
  return  0 ;
}



















本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1531776 ,如需转载请自行联系原作者



相关文章
|
6月前
|
存储 网络协议 C++
C++ Vector容器详解:一站式指南,掌握动态数组的高效使用
C++ Vector容器详解:一站式指南,掌握动态数组的高效使用
383 2
|
程序员 C++
7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在不浪费空间的情况下根据需要动态增加或减少存储空间。
92 0
C++数据结构--01数组二次封装成动态数组 2021-04-23
C++数据结构--01数组二次封装成动态数组 2021-04-23
|
存储 程序员 编译器
C++使用指针,动态数组,指针做参数需要注意的问题等总结
C++使用指针,动态数组,指针做参数需要注意的问题等总结
C++使用指针,动态数组,指针做参数需要注意的问题等总结
|
编译器 C++
【C++】动态数组
那啥时候我们需要定义动态数组呢?
239 0
【C++】动态数组
|
C++ Python
c++入门教程:c++中的动态数组
c++入门教程:c++中的动态数组
|
C++
2014秋C++第16周 项目4参考 为动态数组扩容
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  【项目4-为动态数组扩容】  下面的程序,利用动态数组保存学生的成绩。当再有一批学生成绩需要保存时,要为之扩容(和吃自助一样,用多少,取多少,这好),请补充完整下面的程序,实现如图所示的功能。 i
1120 0
|
C++
关于C++动态数组的若干问题
#include using namespace std; int f(int n) { char x[n]; x[0] = 'a'; //测验了下长度为sizeof(类型)*n cout
727 0
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
33 4