a
- 序列容器
- vector
- list
- deque
- array
- forward_list
- 容器适配器
- stack
- queue
- priority_queue
- 关联容器
- set
- multset
- map
- multimap
- 无序关联容器
- unordered_set
- unordered_multiset
- unordered_map
- unordered_multimap
any
开始
vector
C + + 标准库 vector 类是序列容器的类模板。
vector以线性方式存储给定类型的元素,并允许快速随机访问任何元素。 当随机访问性能处于高级版时,vector是序列的首选容器。
1 | template <class Type, class Allocator = allocator<Type>> |
参数
Type
要存储在矢量中的元素数据类型
Allocator
表示所存储分配器对象的类型,该分配器对象封装有关矢量的内存分配和解除分配的详细信息。 此参数为可选参数,默认值为 allocator<Type>
。
注解
向量允许在序列末尾插入和删除常量事件。 若要在矢量中间插入或删除元素,则需要线性时间。 deque
类容器在序列的开头和结尾处速度更快。 list
类容器在序列内任何位置的插入和删除速度更快。
当成员函数必须将矢量对象中所含序列增加到超过其当前存储容量时,将进行矢量重新分配。 其他的插入和删除均可能改变序列中的各个存储地址。 在所有此类情况下,指向序列更改部分的迭代器或引用将变为无效。 如果未进行重新分配,则只有插入/删除点前的迭代器和引用保持有效。
vector<bool>
类是类型的元素的类模板向量的完全专用化 bool
。 它具有用于专用化的基础类型的分配器。
vector<bool>
引用类是一个嵌套类,其对象可提供对对象中 (单个位) 的元素的引用 vector<bool>
。
成员
Typedef
名称 | 说明 |
---|---|
allocator_type | 一个类型,它表示矢量对象的 allocator 类。 |
const_iterator |
一种类型,它提供可读取矢量中元素的随机访问迭代器 const 。 |
const_pointer |
一种类型,它提供指向 const 矢量中元素的指针。 |
const_reference |
一种类型,该类型提供对 const 存储在向量中的元素的引用。 它用于读取和执行 const 操作。 |
const_reverse_iterator |
一种类型,它提供可读取矢量中任何元素的随机访问迭代器 const 。 |
difference_type |
一个类型,它提供矢量中两个元素的址间的差异。 |
iterator |
一个类型,它提供可读取或修改向量中任何元素的随机访问迭代器。 |
pointer |
一个类型,提供指向向量中元素的指针。 |
reference |
一个类型,它提供对向量中存储的元素的引用。 |
reverse_iterator |
一个类型,它提供可读取或修改反向矢量中的任意元素的随机访问迭代器。 |
size_type |
一个类型,它计算矢量中的元素数目。 |
value_type |
一个类型,它代表向量中存储的数据类型。 |
函数
名称 | 说明 |
---|---|
assign |
清除矢量并将指定的元素复制到该空矢量。 |
at |
返回对矢量中指定位置的元素的引用。 |
back |
返回对向量中最后一个元素的引用。 |
begin |
对该向量中第一个元素返回随机访问迭代器。 |
capacity |
返回在不分配更多的存储的情况下向量可以包含的元素数。 |
cbegin |
返回指向向量中第一个元素的随机访问常量迭代器。 |
cend |
返回一个随机访问常量迭代器,它指向刚超过矢量末尾的位置。 |
crbegin |
返回一个指向反向矢量中第一个元素的常量迭代器。 |
crend |
返回一个指向反向矢量末尾的常量迭代器。 |
clear |
清除向量的元素。 |
data |
返回指向向量中第一个元素的指针。 |
emplace |
将就地构造的元素插入到指定位置的向量中。 |
emplace_back |
将一个就地构造的元素添加到向量末尾。 |
empty |
测试矢量容器是否为空。 |
end |
返回指向矢量末尾的随机访问迭代器。 |
erase |
从指定位置删除向量中的一个元素或一系列元素。 |
front |
返回对向量中第一个元素的引用。 |
get_allocator |
将对象返回到矢量使用的 allocator 类。 |
insert |
将一个或多个元素插入到指定位置的向量中。 |
max_size |
返回向量的最大长度。 |
pop_back |
删除矢量末尾处的元素。 |
push_back |
在矢量末尾处添加一个元素。 |
rbegin |
返回指向反向向量中第一个元素的迭代器。 |
rend |
返回一个指向反向矢量末尾的迭代器。 |
reserve |
保留向量对象的最小存储长度。 |
resize |
为矢量指定新的大小。 |
shrink_to_fit |
放弃额外容量。 |
size |
返回向量中的元素数量。 |
swap |
交换两个向量的元素。 |
运算符
名称 | 说明 |
---|---|
operator[] |
返回对指定位置的矢量元素的引用。 |
operator= |
用另一个向量的副本替换该向量中的元素。 |
assign
清除矢vector将指定的元素复制到该空vector。
1 | void assign(size_type count, const Type& value); |
参数
first
要复制的元素范围内的第一个元素的位置。
last
要复制的元素范围外的第一个元素的位置。
count
要插入到矢量的元素的副本数。
value
插入到向量中的元素的值。
init_list
包含要插入的元素的 initializer_list。
首先, assign
清除向量中的任何现有元素。 然后,将 assign
原始向量中指定范围的元素插入到向量中,或将新的指定值元素的副本插入到向量中。
at
返回对矢量中指定位置的元素的引用。
1 | reference at(size_type position); |
参数
position
要在矢量中引用的元素的下标或位置编号。
返回值
对自变量中的下标元素的引用。 如果 position
大于矢量的大小,将 at
引发异常。
注解
如果将的返回值 at
分配给 const_reference
,则无法修改矢量对象。 如果将 at
的返回值分配给 reference
,则可以修改矢量对象。
back
返回对向量中最后一个元素的引用。
1 | reference back(); |
返回值
向量的最后一个元素。 如果向量为空,则返回值不确定。
注解
如果将的返回值 back
分配给 const_reference
,则无法修改矢量对象。 如果将 back
的返回值分配给 reference
,则可以修改矢量对象。
当使用 _ITERATOR_DEBUG_LEVEL
定义为1或2的进行编译时,如果尝试访问空向量中的元素,将发生运行时错误。 有关详细信息,请参阅 检查迭代器。
begin
对该向量中第一个元素返回随机访问迭代器。
1 | const_iterator begin() const; |
返回值
发现 vector
中第一个元素或空 vector
之后的位置的随机访问迭代器。 请始终比较返回的值 vector::end
以确保它有效。
注解
如果将的返回值 begin
分配给 vector::const_iterator
,则 vector
无法修改对象。 如果将的返回值 begin
分配给 vector::iterator
,则 vector
可以修改该对象。
capacity
返回在不分配更多的存储的情况下向量可以包含的元素数。
1 | size_type capacity() const; |
返回值
分配给该向量的当前存储长度。
注解
resize
如果分配足够的内存来容纳此函数,则成员函数将更有效。 使用成员函数 reserve
指定分配的内存量。
cbegin
返回一个 const
迭代器,该迭代器用于寻址范围内的第一个元素。
1 | const_iterator cbegin() const; |
返回值
一个 const
随机访问迭代器,指向范围的第一个元素,或刚超出空范围末尾 (空范围) 的位置 cbegin() == cend()
。
注解
如果返回值为 cbegin
,则不能修改范围中的元素。
可以使用此成员函数替代 begin()
成员函数,以保证返回值为 const_iterator
。 通常,它与 auto
类型推导关键字一起使用,如下面的示例中所示。 在此示例中,将视为 Container
支持和的任何类型的可修改 (非 const
) 容器 begin()
cbegin()
。
1 | auto i1 = Container.begin(); |
cend
返回 const
后端迭代器,该迭代器指向矢量最后一个元素之后的元素。
1 | const_iterator cend() const; |
返回值
const
向量的过去的迭代器。 它指向矢量最后一个元素之后的元素。 该元素是占位符,不应取消引用。 仅将它用于比较。 如果向量为空,则为 vector::cend() == vector::cbegin()
。
注解
cend
用于测试迭代器是否超过了其范围的末尾。
可以使用此成员函数替代 end()
成员函数,以保证返回值为 const_iterator
。 通常,它与 auto
类型推导关键字一起使用,如下面的示例中所示。 在此示例中,将视为 Container
支持和的任何类型的可修改 (非 const
) 容器 end()
cend()
。
1 | auto i1 = Container.end(); |
返回的值 cend
不应被取消引用。 仅将它用于比较。
clear
清除向量的元素。
1 | void clear(); |
const_iterator
一种类型,它提供可读取矢量中元素的随机访问迭代器 const
。
1 | typedef implementation-defined const_iterator; |
注解
类型 const_iterator
不能用于修改元素的值。
const_pointer
一种类型,它提供指向 const
矢量中元素的指针。
1 | typedef typename Allocator::const_pointer const_pointer; |
注解
类型 const_pointer
不能用于修改元素的值。
iterator 更常用于访问矢量元素。
const_reference
一种类型,该类型提供对 const
存储在向量中的元素的引用。 它用于读取和执行 const
操作。
1 | typedef typename Allocator::const_reference const_reference; |
注解
类型 const_reference
不能用于修改元素的值。
const_reverse_iterator
一种类型,它提供可读取矢量中任何元素的随机访问迭代器 const
。
1 | typedef std::reverse_iterator<const_iterator> const_reverse_iterator; |
注解
类型 const_reverse_iterator
无法修改元素的值,它用于反向循环访问矢量。
crbegin
返回一个指向反向矢量中第一个元素的常量迭代器。
1 | const_reverse_iterator crbegin() const; |
返回值
一种常量反向随机访问迭代器,用于寻址反向 vector
或处理非反向中最后一个元素之后的第一个元素 vector
。
注解
如果返回值为 crbegin
,则 vector
无法修改对象。
crend
返回一个 const
后端反向迭代器,该迭代器指向反向向量的最后一个元素之后的元素。
1 | const_reverse_iterator crend() const; |
返回值
const
反向向量的反向结束迭代器。 它指向反向向量的最后一个元素之后的元素,该元素与非反转向量的第一个元素之前的元素相同。 该元素是占位符,不应取消引用。 仅将它用于比较。
注解
crend
用于反向,正 vector
如 vector::cend
用于 vector
。
如果返回值为 crend
(适当递减的) ,则 vector
无法修改对象。
crend
可用于测试反向迭代器是否已到达其 vector
的末尾。
返回的值 crend
不应被取消引用。 仅将它用于比较。
data
返回指向向量中第一个元素的指针。
1 | const_pointer data() const; |
返回值
一个指针,指向中的第一个元素 vector
或空后面的位置 vector
。
difference_type
一个类型,它提供引用同一向量中元素的两个迭代器之间的差异。
1 | typedef typename Allocator::difference_type difference_type; |
注解
difference_type
也可以被描述为两个指针之间的元素数,因为指向一个元素的指针包含其地址。
iterator 更常用于访问矢量元素。
emplace
将就地构造的元素插入到指定位置的向量中。
1 | template <class... Types> |
参数
position
中 vector
插入第一个元素的位置。
args
构造函数参数。 函数根据所提供的自变量来推断要调用的构造函数重载。
返回值
该函数将返回一个指向 vector
中新元素的插入位置的迭代器。
注解
任何插入操作都可能会消耗大量资源,请参阅vector
类以了解性能的讨论 vector
。
emplace_back
将一个就地构造的元素添加到向量末尾。
1 | template <class... Types> |
参数
args
构造函数参数。 函数根据所提供的自变量来推断要调用的构造函数重载。
empty
测试矢量是否为空。
1 | bool empty() const; |
返回值
true
如果向量为空,则为; 否则为。 false
如果矢量不为空,则为。
end
返回后端迭代器,该迭代器指向矢量最后一个元素之后的元素。
1 | iterator end(); |
返回值
向量的过去的迭代器。 它指向矢量最后一个元素之后的元素。 该元素是占位符,不应取消引用。 仅将它用于比较。 如果向量为空,则为 vector::end() == vector::begin()
。
注解
如果将的返回值 end
分配给类型的变量 const_iterator
,则不能修改矢量对象。 如果将的返回值 end
分配给类型的变量 iterator
,则可以修改矢量对象。
erase
从指定位置删除向量中的一个元素或一系列元素。
1 | iterator erase( |
参数
position
要从向量中移除的元素的位置。
first
要从向量中移除的第一个元素的位置。
last
紧接要从向量中移除的最后一个元素的位置。
返回值
一个迭代器,它指定已移除的任何元素之外保留的第一个元素或指向向量末尾的指针(若此类元素不存在)。
front
返回对向量中第一个元素的引用。
1 | reference front(); |
返回值
对向量对象中第一个元素的引用。 如果向量为空,则返回值不确定。
注解
如果将的返回值 front
分配给 const_reference
,则无法修改矢量对象。 如果将的返回值 front
分配给 reference
,则可以修改矢量对象。
当使用 _ITERATOR_DEBUG_LEVEL
定义为1或2的进行编译时,如果尝试访问空向量中的元素,将发生运行时错误。 有关详细信息,请参阅 检查迭代器。
get_allocator
返回用于构造矢量的分配器对象的一个副本。
1 | Allocator get_allocator() const; |
返回值
向量所使用的分配器。
注解
矢量类的分配器指定类管理存储的方式。 C++ 标准库容器类提供的默认分配器足以满足大多编程需求。 编写和使用你自己的分配器类是高级 c + + 功能。
insert
将一个元素或多个元素或一系列元素插入到指定位置的向量中。
1 | iterator insert( |
参数
position
向量中插入第一个元素的位置。
value
插入到向量中的元素的值。
count
插入向量中的元素数目。
first
要复制的范围元素中的第一个元素的位置。
last
要复制的元素范围以外的第一个元素的位置。
返回值
前两个 insert
函数返回一个指定新元素插入到向量的位置的迭代器。
注解
作为前置条件, first
last
不能将迭代器放入矢量,或者行为未定义。 任何插入操作都可能会消耗大量资源,请参阅 vector
类以了解性能的讨论 vector
。
iterator
一个类型,它提供可读取或修改向量中任何元素的随机访问迭代器。
1 | typedef implementation-defined iterator; |
注解
类型 iterator
可用于修改元素的值。
max_size
返回向量的最大长度。
1 | size_type max_size() const; |
返回值
向量的最大可取长度。
operator[]
返回对指定位置的矢量元素的引用。
1 | reference operator[](size_type position); |
参数
position
矢量元素的位置。
返回值
如果指定的位置大于或等于容器大小,则结果为 undefined。
注解
如果将的返回值 operator[]
分配给 const_reference
,则无法修改矢量对象。 如果将 operator[]
的返回值分配给引用,则可以修改矢量对象。
当使用 _ITERATOR_DEBUG_LEVEL
定义为1或2的进行编译时,如果尝试访问向量边界之外的元素,将发生运行时错误。 有关详细信息,请参阅 检查迭代器。
operator=
用另一个向量的副本替换该向量中的元素。
1 | vector& operator=(const vector& right); |
参数
right
vector
要复制到中的 vector
。
注解
清除中的任何现有元素后 vector
,会 operator=
将的内容复制或移动 right
到 vector
。
pointer
一个类型,提供指向向量中元素的指针。
1 | typedef typename Allocator::pointer pointer; |
注解
类型 pointer
可用于修改元素的值。
pop_back
删除矢量末尾处的元素。
1 | void pop_back(); |
注解
有关代码示例,请参阅 vector::push_back()。
push_back
在矢量末尾处添加一个元素。
1 | void push_back(const T& value); |
参数
value
要赋给添加到矢量末尾处的元素的值。
rbegin
返回指向反向向量中第一个元素的迭代器。
1 | reverse_iterator rbegin(); |
返回值
发现反向矢量中的第一个元素或发现曾是非反向矢量中的最后一个元素的反向双向迭代器。
注解
如果将的返回值 rbegin
分配给 const_reverse_iterator
,则无法修改矢量对象。 如果将 rbegin
的返回值分配给 reverse_iterator
,则可以修改矢量对象。
reference
一个类型,它提供对向量中存储的元素的引用。
1 | typedef typename Allocator::reference reference; |
rend
返回一个后端反向迭代器,该迭代器指向反向向量的最后一个元素之后的元素。
1 | const_reverse_iterator rend() const; |
返回值
反向向量的反向结束迭代器。 它指向反向向量的最后一个元素之后的元素,该元素与非反转向量的第一个元素之前的元素相同。 该元素是占位符,不应取消引用。 仅将它用于比较。
注解
rend
与反向矢量一起使用,就像 end
与矢量一起使用一样。
如果将的返回值 rend
分配给 const_reverse_iterator
,则无法修改矢量对象。 如果将 rend
的返回值分配给 reverse_iterator
,则可以修改矢量对象。
rend
可用于测试反向迭代器是否已到达其矢量末尾。
返回的值 rend
不应被取消引用。 仅将它用于比较。
reserve
为向量对象保留最小的存储长度,必要时为其分配空间。
1 | void reserve(size_type count); |
参数
count
要分配给向量的最小存储长度。
resize
为矢量指定新的大小。
1 | void resize(size_type new_size); |
参数
new_size
矢量的新大小。
value
新大小大于旧大小时添加至矢量的新元素的初始化值。 如果省略该值,则新对象将使用其默认构造函数。
注解
如果容器的大小小于请求的大小,则 new_size
resize
会将元素添加到向量,直到达到请求的大小。 如果容器的大小大于请求的大小,则 resize
删除接近容器末尾的元素,直到达到大小 new_size
。 如果容器的当前大小与请求的大小相同,则不执行任何操作。
size
反映矢量的当前大小。
reverse_iterator
一个类型,它提供可读取或修改反向矢量中的任意元素的随机访问迭代器。
1 | typedef std::reverse_iterator<iterator> reverse_iterator; |
注解
reverse_iterator
类型用于反向循环访问向量。
shrink_to_fit
放弃额外容量。
1 | void shrink_to_fit(); |
size
返回向量中的元素数量。
1 | size_type size() const; |
返回值
向量的当前长度。
size_type
一个类型,它计算矢量中的元素数目。
1 | typedef typename Allocator::size_type size_type; |
swap
交换两个向量的元素。
1 | void swap( |
参数
right
提供要交换的元素的向量。 或,其元素要与矢量中的元素进行交换的向量 left
。
left
一个向量,其元素将与矢量中的元素进行交换 right
。
value_type
一个类型,它代表向量中存储的数据类型。
1 | typedef typename Allocator::value_type value_type; |
注解
value_type
是模板参数 Type
的同义词。
vector
构造向量。 重载构造特定大小的向量,或具有特定值的元素。 或作为某些其他矢量的全部或部分的副本。 某些重载还允许您指定要使用的分配器。
1 | vector(); |
参数
allocator
要用于此对象的分配器类。 get_allocator
返回对象的分配器类。
count
构造的矢量中的元素数。
value
构造的矢量中的元素值。
source
要成为副本的构造的矢量中的矢量。
first
要复制的元素范围内的第一个元素的位置。
last
要复制的元素范围外的第一个元素的位置。
init_list
initializer_list
包含要复制的元素的。
注解
所有构造函数都存储分配器对象 (allocator
) 并初始化向量。
前两个构造函数指定一个空初始矢量。 第二个构造函数显式指定要使用) 的分配器类型 (allocator
。
第三个构造函数指定 (count
类的默认值元素) 元素的重复 Type
。
第四个和第五个构造函数指定 (count
) 的值元素的重复 value
。
第六个构造函数指定矢量的副本 source
。
第七个构造函数移动矢量 source
。
第八个构造函数使用 initializer_list 指定元素。
第九个和第十个构造函数复制矢量的范围(first
、last
)。
list
C + + 标准库列表类是序列容器的类模板,用于在线性排列中维护其元素,并允许在序列内的任何位置高效插入和删除。 序列存储为双向链接的元素列表,每个包含一些 Type 类型的成员。
1 | template <class Type, class Allocator= allocator<Type>> |
容器类型选择通常应根据应用程序所需的搜索和插入的类型。 当对任何元素的随机访问超出限制并且仅要求在序列的末尾插入或删除元素时,矢量应作为用于管理序列的首选容器。 当需要随机访问并且在序列起始处和末尾处插入和删除元素已到达极限时,应首选类 deque 容器进行操作。
列表成员函数 merge、reverse、unique、remove 和 remove_if 已针对对列表的操作进行了优化,它们可作为泛型对应函数的高性能替代函数。
当成员函数必须插入或删除列表中的元素时,将发生列表的重新分配。 在所有这类情况下,仅指向受控制序列被消除部分的迭代器或引用将变为无效。
包括 c + + 标准库标准标头 <list> 以定义 容器 类模板列表和多个支持模板。
构造函数
名称 | 说明 |
---|---|
list | 构造一个列表,它具有特定大小或它的元素具有特定值,或具有特定 allocator 或作为某个其他列表副本。 |
Typedef
名称 | 描述 |
---|---|
allocator_type | 表示列表对象的 allocator 类的类型。 |
const_iterator | 一种类型,它提供可读取列表中元素的双向迭代器 const 。 |
const_pointer | 提供指向列表中元素的指针的类型 const 。 |
const_reference | 一种类型,它提供对 const 存储在列表中用于读取和执行操作的元素的引用 const 。 |
const_reverse_iterator | 一种类型,它提供可读取列表中任何元素的双向迭代器 const 。 |
difference_type | 提供引用同一列表中的元素的两个迭代器之间的差异的类型。 |
iterator | 提供可读取或修改列表中任何元素的双向迭代器的类型。 |
pointer | 提供指向列表中元素的指针的类型。 |
reference | 一种类型,它提供对 const 存储在列表中用于读取和执行操作的元素的引用 const 。 |
reverse_iterator | 提供可读取或修改反向列表中的元素的双向迭代器的类型。 |
size_type | 计算列表中元素的数目的类型。 |
value_type | 表示列表中存储的数据类型的类型。 |
函数
名称 | 描述 |
---|---|
assign | 将元素从列表中擦除并将一组新的元素复制到目标列表。 |
back | 返回对列表中最后一个元素的引用。 |
back | 返回发现列表中第一个元素的位置的迭代器。 |
cbegin | 返回发现列表中第一个元素的位置的常量迭代器。 |
cend | 返回发现一个列表中最后一个元素之后的位置的敞亮表达式。 |
clear | 消除列表中的全部元素。 |
crbegin | 返回发现反向列表中第一个元素的位置的常量迭代器。 |
crend | 返回用于发现反向列表中最后一个元素之后的位置的常量迭代器。 |
emplace | 将构造的元素插入到列表中的指定位置。 |
emplace_back | 在列表的结尾处添加一个就地构造的元素。 |
emplace_front | 在列表的起始位置添加一个就地构造的元素。 |
empty | 测试列表是否为空。 |
end | 返回用于发现列表中最后一个元素之后的位置的迭代器。 |
erase | 从列表中的指定位置移除一个或一系列元素。 |
front | 返回对列表中第一个元素的引用。 |
get_allocator | 返回用于构造列表的 allocator 对象的一个副本。 |
insert | 将一个、几个或一系列元素插入列表中的指定位置。 |
max_size | 返回列表的最大长度。 |
merge | 将元素从参数列表移除,将它们插入目标列表,将新的组合元素集以升序或其他指定顺序排序。 |
pop_back | 删除列表末尾的元素。 |
pop_front | 删除列表起始处的一个元素。 |
push_back | 在列表的末尾添加元素。 |
push_front | 在列表的开头添加元素。 |
rbegin | 返回发现反向列表中第一个元素的位置的迭代器。 |
remove | 清除列表中与指定值匹配的元素。 |
remove_if | 将满足指定谓词的元素从列表中消除。 |
rend | 返回发现反向列表中最后一个元素之后的位置的迭代器。 |
resize | 为列表指定新的大小。 |
reverse | 反转列表中元素的顺序。 |
size | 返回列表中元素的数目。 |
sort | 按升序或其他顺序关系排列列表中的元素。 |
splice | 将元素从自变量列表中删除或将它们插入目标列表。 |
swap | 交换两个列表的元素。 |
unique | 从列表中删除满足某些其他二元谓词的相邻重复元素或相邻元素。 |
运算符
名称 | 描述 |
---|---|
operator = | 用另一个列表的副本替换列表中的元素。 |