vector是一个序列容器,代表可变大小的array数组。
1、构造函数和析构函数
构造函数:
默认构造函数default (1) | explicit vector (const allocator_type& alloc = allocator_type());创建一个空vector对象,无任何元素 |
---|---|
fill (2) | explicit vector (size_type n);构造含n个元素的容器 vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());构造含n个元素的容 器,每个元素值为val。 |
range (3) | template <class InputIterator> vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());利用另一个容器的 [first,last)之间的元素构造一个新容器。 |
复制构造函数copy (4) | vector (const vector& x);复制容器x中的元素创建一个新容器 vector (const vector& x, const allocator_type& alloc); |
move (5) | vector (vector&& x);移动容器x中的元素到新容器中。之后,x容器的值处于不确定状态。 vector (vector&& x, const allocator_type& alloc); |
初始列表initializer list (6) | vector (initializer_list<value_type> il, const allocator_type& alloc = allocator_type());利用初始化列表il来构造 容器vector |
~vector();赋值运算符
copy (1) | vector& operator= (const vector& x);拷贝容器x中的元素到新容器中 |
---|---|
move (2) | vector& operator= (vector&& x);移动容器x中的元素到新容器中 |
initializer list (3) | vector& operator= (initializer_list<value_type> il);将初始化列表赋给新容器。 |
2、迭代器函数
非const修饰的迭代器。
begin()返回指向容器第一个元素的迭代器
iterator begin() noexcept; const_iterator begin() const noexcept;
end()返回指向容器最后一个元素的下一个位置的迭代器
iterator end() noexcept; const_iterator end() const noexcept;
rbegin()返回一个反向迭代器,指向容器的最后一个元素
reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept;
rend()返回一个反向迭代器,指向容器的第一个元素的前面一个位置
reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept;
const修饰的迭代器,c++11新增的。
cbegin()返回一个指向容器第一个元素的const迭代器
const_iterator cbegin() const noexcept;
cend()返回一个指向容器的最后一个元素下一个位置的const迭代器。
const_iterator cend() const noexcept;
crbegin()返回一个反向const迭代器,指向容器的最后一个元素
const_reverse_iterator crbegin() const noexcept;
crend()返回一个反向const迭代器,指向容器的第一个元素的前面的一个位置。
const_reverse_iterator crend() const noexcept;
3、容量相关函数
size()返回vector中元素的个数
size_type size() const noexcept;
max_size()返回vector中所能包含的元素的最大个数
size_type max_size() const noexcept;
resize()重置容器vector的大小。若n小于当前容器的元素个数,则将容器截断为n个元素,保留前n个元素,删除后面的元素。若n大于当前容器的元素个数,则将接着当前容器后面扩空元素,使其元素个数达到n,若指定value,则将扩充的元素指定为value,否则,新元素是未初始化的。若n大于capacity时,会重新分配存储区。
void resize (size_type n); void resize (size_type n, const value_type& val);
capacity()返回分配的内存容量大小,通常等于或大于容器的size。不一定是max_size。当需要更多容量时,可继续分配。
size_type capacity() const noexcept;
empty()判断容器是否为空
bool empty() const noexcept;
reserve()预留n个元素大小空间。使得容器的capacity足够容纳n个元素。当n大于capacity时,会引起容器重新分配内存,增加capacity到n,或者更大。其他情况下,不会重新分配内存,也不会影响capacity。此函数对容器的size和元素没有任何影响。
void reserve (size_type n);
shrink_to_fit() //C++11新增使容器减小capacity使其适合其size。可能会引起内存重新分配,但不影响容器的size,并且也不改变元素值。
void shrink_to_fit();
4、元素访问
operator[]返回下标为n的元素的索引
reference operator[] (size_type n); const_reference operator[] (size_type n) const;
at[]返回
reference at (size_type n);
const_reference at (size_type n) const;
front()返回容器第一个元素的引用。该函数作用于一个空容器时,会导致未定义的行为。
reference front(); const_reference front() const;
back()返回容器最后一个元素的引用
reference back(); const_reference back() const;
data()c++11新增返回一个指向内存区域的指针
value_type* data() noexcept; const value_type* data() const noexcept;
5、修改元素函数
assign()重置容器vector中的元素内容,并根据情况改变容器的size。
range (1) | template <class InputIterator> void assign (InputIterator first, InputIterator last);利用first到last范围的元素重置容器 |
---|---|
fill (2) | void assign (size_type n, const value_type& val);利用val重置容器中n个元素 |
initializer list (3) | void assign (initializer_list<value_type> il);利用初始化列表重置容器 |
push_back()用val值作为新元素的值添加到容器的尾部,同时改变容器的大小
void push_back (const value_type& val); void push_back (value_type&& val);
pop_back()删除容器的最后一个元素,同时减小容器的size。
void pop_back();
insert()在指定的位置n之前插入一个新元素,值为val,同时改变元素的大小
single element (1) | iterator insert (const_iterator position, const value_type& val);在position处插入元素值val |
---|---|
fill (2) | iterator insert (const_iterator position, size_type n, const value_type& val);在position之前插入n个值为val的元素 |
range (3) | template <class InputIterator> iterator insert (const_iterator position, InputIterator first, InputIterator last);在position之前插入迭代器first到last 之间的元素值 |
move (4) | iterator insert (const_iterator position, value_type&& val);将val值移动到position之前 |
initializer list (5) | iterator insert (const_iterator position, initializer_list<value_type> il);将初始化列表插入到position处。 |
erase()删除容器的中的某个元素,或是某个范围内的元素。同时改变容器的大小。
iterator erase (const_iterator position); iterator erase (const_iterator first, const_iterator last);
swap()交换两个容器的内容
void swap (vector& x);
clear()删除容器中所有元素,并将容器大小置为0。
void clear() noexcept;
emplace()//c++11新增
template <class... Args> iterator emplace (const_iterator position, Args&&... args);
emplace_back()//c++11新增
template <class... Args> void emplace_back (Args&&... args);
6、其他
get_allocator()返回vector相关的allocator对象的拷贝。
allocator_type get_allocator() const noexcept;