关于STL的常用容器以及算法的总结
主要对https://blog.csdn.net/u013846293/article/details/79410293
以及https://blog.csdn.net/xyqqwer/article/details/81263060
作者所述,做了一波搬运以及全面总结。方便于本人查阅的同时也希望能帮助到同仁。后续会增加一些需要的。
序列式容器
vector<int> vec,vec2;
注意:vector没有push_front()和pop_front()操作,因为代价有点大。
vector容量只会扩张,不会减少
可以用[ ]作为随机存取的典型。
vec.begin() //指向迭代器中第一个元素。
vec.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。
vec.push_back(elem) //在尾部加入一个数据。
vec.pop_back() //删除最后一个数据。
vec.capacity() //vector当前总共空间的大小,提一下vector的增加规则,开始两次push_back是1,2之后增加的话按照1.5倍当前的大小扩充容量。
vec.reserve() //可以通过这个预留相当的空间,设置Vector最小的元素容纳数量
vec.size() //返回容器中数据个数。
vec.resize() //强行改变Vector元素数量的大小,截断与扩充。当resize元素大于capacity()时,将会产生扩充,扩充大小等于resize的。
vec.empty() //判断容器是否为空。
vec.front() //传回第一个数据。
vec.back() //传回最后一个数据,不检查这个数据是否存在。
vec.at(index) //相当于[index],传回索引idx所指的数据,如果idx越界,抛出out_of_range。
vec.clear() //移除容器中所有数据。
vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。
vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator
vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。
vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。
vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值。
vec.assign(int n1,int n2) // 对Vector中的元素赋值,将n1个n2赋值给vec ,或者也可以是一个迭代器区间,这个操作会清除掉vec的数据。
get_allocator() 返回vector的内存分配器
vec.max_size() 返回Vector所能容纳元素的最大数量(上限)
vec.rbegin() 返回Vector尾部的逆迭代器
vec.rend() 返回Vector起始的逆迭代器
swap() //交换两个Vector,用法vec.swap(vec2),vec和vec2交换,也就是vec中的所有元素到vec2中,vec2中的所有元素到vec中
如果想翻转整个vector的话,有两种办法,一种是C++提供的函数reverse(vec.begin(),vec.end());另一种就是头尾互换,头尾互换也有两种办法,一种是用C++提供的swap函数,swap(vec[i],vec[j]);另一种就是设置一个中间变量,然后交换,类似于temp=vec[i];vec[i]=vec[j];vec[j]=temp;
然后介绍一下上面用到的这两个非常好用的函数,swap和reverse,两个函数都在<algorithm>头文件中
swap:用于交换两个变量的值,以整型为例,int a=2,b=3;swap(a,b);