vector详解:
|| vector是一个单端数组,与普通数组的区别在于:普通数组是一个静态空间,vector可以动态扩展
|| 动态扩展的实质:并不是在原有数组上直接扩展,而是找到另外一个空间再将新数组拷入到这个新空间
|| vector的迭代器是最强大的随机访问迭代器,所以其成员函数的有些参数是异于string的成员函数的
|| vector的构造函数(初始化)【默拷重区】— 归功于强大的迭代器vector可定区间赋值
|vector<T> v; // 默认构造函数
|vector(const vector &vec); // 拷贝构造函数。
|vector(v.begin(), v.end()); // 将v [begin(), end()) 区间中的元素拷贝给本身。
|vector(n, elem); // 构造函数将n个elem拷贝给本身。
|| vector的赋值 【重区】— 归功于强大的迭代器vector可定区间赋值
|“ = ”赋值:
|vector& operator=(const vector& vec)
|assign赋值 --- 传入子集时使用
|vector.assign(v'.begin(), v'.end())// 将v [begin(), end()) 区间中的元素拷贝给本身
|vector.assign(10, 100) // 重复次数和重复字符
|| vector的容量和大小
|empty() --// 判空返回true或false
|capacity() --//返回容器容量
|size() --//返回容器长度(元素个数)
|resize(int num, elemtype elem = 0) --// 重新定义数组长度,若变长则以elem(默认为0)填充,变短则删除超出部分
|| vector的插入和删除
|push_back(elem)
|pop_back()
|insert(const_iterator pos, int count = 1, elemtype elem)
//在迭代器指向的位置插入count个elem 注意:必须使用迭代器指明位置,插入个数不指明时为1
|erase(const_iterator pos) // 删除迭代器指定位置的元素
|erase(const_iterator pos_start, const_iterator pos_end) // 删除迭代器指定位置间的所有元素
|clear()
|| vector的读取
| [ ]读取
|at读取
|front()
|back()
|| vector的交换
| swap(vector &vec) // 交换两个vector的值
实际用途:交换函数配合匿名拷贝函数可以巧妙地收缩占用空间
vector< int >(v1).swap(v1) // v1是有空间浪费的数组,我们匿名拷贝构造v1时匿名创建了
一个无空间浪费的完美数组,与原v1 swap后,v1获得了无浪费的空间,获得了垃圾空间的
匿名数组自动清除。
|| vector预留空间 – 减少vector动态扩展时的扩展次数
|reserve(int len) // 容器预留len个长度的位置,预留位置上不可访问不用初始化