一般情况下我们在写程序的时候就要计划好,在这个程序中,我们需要用到哪些数据,什么类型的数据,数据规模有多大;但有很多时候,只有程序运行取来才能知道数据规模有多大,这时候就需要用到动态内存分配。
1 动态申请/释放类型的操作符new/delete
语法形式:
// 创建
new 类型名T (初始化参数列表)
// 释放
delete 指针p // 释放指针p所指向的内存,p必须是new操作的返回值
// 删除的是分配的空间而不是指针变量
功能:
在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋初值。
结果:
① 成功:T类型的指针,指向新的分配内存;
② 失败:抛出异常。
1.1 申请和释放动态数组
#include<iostream>
using namespace std;
int main(){
int size;
cout << "enter a number :";
cin >> size;
int *array = new int[size]; // 申请了int型数组空间,得到一个指针,赋值给指针型变量array
// new操作成功操作后的结果是得到一个指针
cout << "enter numbers : " << endl;
for (int i = 0; i < size;i++)
cin >> array[i];
for (int i = 0; i < size; i++)
cout << "aray[" << i << "] = " << array[i] << endl;
delete[] array; //释放内存,delete[] 指释放的是数组,只有delete只是放首元素空间
}
1.2 智能指针
unique_ptr:
不允许多个指针共享资源,可以用标准库中的move函数转移指针; shared_ptr:
多指针共享资源;
weak_ptr:
可复制shared_ptr,但其构造或释放对资源不产生影响
1.3 vector
vector是C++标准模板库中的一个类模板,vector----向量,使用前需要将头文件包进来。vector 其实就像一个数组一样好用,并且比数组更安全好用:
(1). 可以封装任何类型的动态数组,自动创建和删除
(2). 数组下标越界检查
(3). 各种操作函数
#include<vector>
#include<iostream>
using namespace std;
int main(){
int size;
cout << "enter a number size :";
cin >> size;
vector<int> array(size);
cout << "enter numbers : " << endl;
for (int i = 0; i < size; i++)
cin >> array[i];
for (int i = 0; i < size; i++)
cout << "aray[" << i << "] = " << array[i] << endl;
int size_of = array.size();
cout << size_of << endl;
}
这只是一个vector类模板的最简单的定义与初始化应用。
后面笔记有机会再详细补充。。。