STL之vector
- 头文件及声明
1
2
3
4
5
6
7
8
namespace std
{
template<typename T, typename Allocator = allocator<T>>
class vector;
}
size and capacity
vector在内存分配不足的时候会采取重新分配的方式,这将会导致很大的开销,因此,可以在使用前调用reserve(int)
函数来主动分配一大块内存空间。但是该函数的分配的空间必须比原来的大,不能收缩内存,因此可以用shrink_to_fit()
函数来压缩空间到合适的程度,但是该函数并不保证一定会有效执行,仅仅是发送一个请求而已,如下:1
2
3v.shrink_to_fit(); //并不保证执行,c++11的函数
//在c++11之前可以这样
std::vector<T>(v).swap(v);赋值操作
c.assign(n, elem)
c.assign(beg, end)
c.assign(initlist)
- 插入和删除
vector并不提供删除某一个特定值的功能,因此这需要用到remove来做到,如:coll.earse(remove(coll.begin(), coll.end(), val), coll.end())
remove函数并非真正的删除,而是将所有的val移动到vector的尾部,并返回新的尾后迭代器,即第一个要删除的val,然后使用earse删除。
考虑到对于插入删除性能的考虑,在进行这些操作时应该注意一下三点:1.插入和删除尽量在尾部进行;2.保证容量足够大;3.一次性插入大量元素而不是分多次进行。
- 作为c数组使用
和array一样永远data函数返回一个指针。