STL-vector
Vector是一个动态数组,其元素可以是任意型别,但必须满足assign和copy两个性质。
一、Vector的构造函数:
vector<int>v;//创建一个空vector vector<int>v1(5);//创建一个大小为5的初始化为值为0的vector{0,0,0,0,0} vector<int>v2(5,9);//创建一个大小为5,值都为9的vector{9,9,9,9,9} vector<int>v3(v2);//利用拷贝构造了一个v2副本的vector{9,9,9,9,9} vector<int>v4(v3.begin(),v3.end());//以区间创建了一个vector{9,9,9,9,9} int a[] = { 1,3,5,2,4,6 }; vector<int>v5(a,a+6);//以数组创建了一个vector{1,3,5,2,4,6} //以输入流迭代器创建了一个vector,其中第一个参数必须加(),否则创建的不是vector而是一个函数声明 vector<int>v6((istream_iterator<int>(cin)),istream_iterator<int>());
二、Vector的非变动性操作:
v.size();//返回v中的当前元素个数 v.capacity();//返回v创建时能容纳最大元素的个数 v.empty();//判断v是否为空,空返回true;其效率高于v.size(0); v.max_size();//返回v最大容纳元素的个数 v.reserve(20);//如果容量不足,扩容时容量大小为形参设定值,且形参值大于当前容量值 v == v1;//判断v是否等于v1 v != v1;//判断v是否不等于v1 v > v1;//判断v是否大于v1 v < v1;//判断v是否小于v1 v <= v1;//判断v是否小于等于v1 v >= v1;//判断v是否大于等于v1
三、Vector的赋值操作
v.assign(8, 10);//将n个值为elem的元素赋值给v v.assign(v1.begin(), v1.end());//将v1区间的元素赋值为v v = v1;//将v1赋值为v v.swap(v1);//交换v与v1的元素 swap(v, v1);//同上,此为全局函数
四、Vector元素的存取
v[i];//返回索引i所标示的元素,不进行范围检测 v.at(i);//返回索引i所标示的元素,i越界抛出out_of_range v.back();//返回最后一个元素,不检查最后一个元素是否存在 v.front();//返回第一个元素,不检查第一个元素是否存在
五、Vector迭代器相关函数
v.begin();//返回指向第一个元素的迭代器 v.end();//返回指向最后元素下一个位置的迭代器 v.rbegin();//返回指向最后一个元素的迭代器 v.rend();//返回指向第一个元素前一个位置的迭代器
v.cbegin();//返回指向第一个元素的常迭代器 v.cend();//返回指向最后元素下一个位置的常迭代器 v.crbegin();//返回指向最后一个元素的常迭代器 v.crend();//返回指向第一个元素前一个位置的常迭代器
六、Vector的插入操作
v.push_back(1);//在末尾插入元素 v.insert(v.begin(), 2);//在某位置前插入元素 v.insert(v.end(), 5, 20);//在某位置前插入n个值为elem的元素 v.insert(v.begin, v1.begin(), v1.end());//在某位置前插入一段区间元素
七、Vector的删除操作
v.pop_back();//末尾删除 v.erase(v.begin());//指定位置上的元素删除 v.erase(v.begin(), v.end());//指定区间中的元素删除 v.clear();//全部元素清除 v.resize(6);//将元素的数量改为形参数,如果其大于size则多出来的元素值由default构造完成,小于size截取后半段 v.resize(6, 10);//将元素的数量改为形参数,如果其大于size则多出来的元素值为elem,小于size截取后半段
八、Vector的减容操作
vector<int>v9(v1); v9.swap(v1);//将v1的容量缩减至size大小 v.shrink_to_fit();//将v1的容量缩减至size大小
九、Vector的算法
1、移除与某值相等得所有元素
v.erase(remove(v.begin(), v.end(), val));//移除元素值为val的所有元素