
Vector
头文件
定义
在这里插入图片描述
构造函数
1 2 3 4
| vector(); vector( size_type num, const TYPE &val ); vector( const vector &from ); vector( input_iterator start, input_iterator end );
|
属性
vector可以理解成一个可以扩张的数组,每次扩张多出来一定数量的容量。这个多出多少是不确定的,不同编译器不同,VS2015是1.5,GCC是2倍,一般介于这两者之间。
- size_type capacity() const;
- 返回当前容量
- 容量并非实际有几个元素,而是最多能放几个元素
- void reserve (size_type n);
- size_type size() const;
- void resize (size_type n, value_type val = value_type());
- 改变容器元素数量
- 会强制改变元素数量无论减少还是增加,都填为val
1 2
| vec.resize(10) vec.resize(10,2)
|
- bool empty() const;
操作
- void push_back (const value_type& val);
single element (1) |
iterator insert (iterator position, const value_type& val); |
fill (2) |
void insert (iterator position, size_type n, const value_type& val); |
range (3) |
template <class InputIterator> void insert (iterator position, InputIterator first, InputIterator last); |
1 2 3
| vec.insert(vec.begin(),7); vec.insert(vec1.begin()+1,3,6); vec.insert(vec1.begin()+2,vec1.begin(),vec2.begin()+2);
|
- void pop_back();
- iterator erase (iterator position);
iterator erase (iterator first, iterator last);
1 2
| vec.erace(vec.begin+5); vec.erace(vec.begin,vec.begin+5);
|
range (1) |
template <class InputIterator> void assign (InputIterator first, InputIterator last); |
fill (2) |
void assign (size_type n, const value_type& val); |
1 2
| vec.assign(vec1.begin(),vec1.begin()+3); vec.assign(3,6);
|
- void clear();
- 清除vector中所有元素,会析构所有元素
- 未必会改变容器大小(capacity)
1 2
| vec.clear() vector<T>().swap(x);
|
- void swap (vector& x);
查询
- iterator begin();
reverse_iterator rbegin();
- begin指向当前容器起始元素的迭代器,rbegin
- reference front();
- iterator end();
reverse_iterator rend();
- end是指向容器末尾元素下一位的迭代器,rend是指向第一个元素前的迭代器
- reference back();
- reference at (size_type n);
- 返回指定位置的元素的引用,比方括号更加安全,会在越界时抛出一个异常
C++11
- const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;
1 2 3 4
| vec.cbegin(); vec.cend(); vec.crbegin(); vec.crend();
|
- value_type* data() noexcept;
1 2 3 4 5 6
| int* p = myvector.data();
*p = 10; ++p; *p = 20; p[2] = 100;
|
template <class… Args>
iterator emplace (const_iterator position, Args&&… args);
template <class… Args>
void emplace_back (Args&&… args);
- 更高效的insert()和push_back(),原地构造而不是构造再移动入容器
1 2
| vec.emplace(myvector.end(), 300); vec.emplace_back(100)
|
- void shrink_to_fit();
1
| vec.shrink_to_fit();
|
复杂度
适合在尾部插入弹出,插入删除特定位置都是O(n)。