vector基本原理


原理

    c++中数组一旦声明,空间大小是无法改变的,而vector是可以动态扩展的,内部也是维护了一个数组,但它并不是在原有的空间后面接新空间,而是找一块更大的内存,并把原数据拷贝过来,释放原空间.

头文件

#include <vector>
using namespace std;

vector功能

    vector也成为单端数组,可以当成一个数组来使用

构造函数原型:

	//vector<T> v;				//才用模板实现类实现,默认构造函数
	//vector(v.begin(), v.end());	//将v begin(),end()区间的元素 拷贝给本身
	//vector(n, elem);			//构造函数将n个elem拷贝给本身
	//vector(const vector &vec);  //拷贝构造函数

构造函数用法(初始化vector):

vector<int>v1;//默认构造函数,无参构造
vector<int>v2(v1.begin(), v1.end());//   用v1的迭代器  开始到结束的数据  初始化给v2
vector<int>v3(10, 100);  //用10个100 初始化 vector容器
vector<int>v4(v3);   //拷贝构造

常用方法:

	//容器声明
	vector<int> varr;  //定义一个int类型的 vector容器

	//设置预留空间(减少动态扩展的次数)
	v1.reserve(10000);//预留10000个元素长度,预留位置不初始化,元素不可访问

	//插入和删除
	v1.empty();//判断容器是否为空
	v1.capacity();//容器的容量
	v1.size();//返回容器中元素的个数
	v1.resize(100);		// 重新定义容器长度为100, 如果是变长,则以默认值填充新位置,如果是变短,则末尾超出长度的元素将被删除
	v1.resize(100, 2); // 重新定义容器长度为100, 如果是变长,则以参数二的值填充新位置,如果是变短,则末尾超出长度的元素将被删除
	v1.push_back(100); //尾部插入元素
	v1.pop_back();  //删除最后一个元素
	v1.clear();		//删除容器中的所有元素
	v1.insert(v1.begin(),100);//在v1开始的位置 插入一个100  原型:v1.insert(const_iterator pos, ele);//迭代器指向位置pos插入元素els
	v1.insert(v1.begin(), 5,100);//在v1开始的位置,插入5个100  原型://v1.insert(const_iterator pos,int count, ele)//跌倒器指向位置pos,插入count个ele
	v1.erase(v1.begin());//删除成员_迭代器指向的  原型://v1.erase(const_iterator pos) //删除迭代器指向的元素
	

	//读取数据
	v1.at(3);//返回3位置的数据
	v1.front();//返回容器中的第一个元素
	v1.back();//返回容器中最后一个元素
	v1[3];//  像数组一样 用下标读取
	
	//变量交换
	v1.swap(v2); //使用v2和v1内容互换

综合代码实例: