C++ 概念: Container

来自cppreference.com
< cpp‎ | concept
 
 
 

容器 (Container) 是用于存储其他对象并照顾管理其所容纳的对象所用的内存的对象。

目录

[编辑] 要求

  • C 容器类型;
  • T 元素类型;
  • ab C 类型对象。

[编辑] 类型

名称 类型 注意
value_type T 可擦除 (Erasable)
reference T&
const_reference const T&
iterator 指向 T 的迭代器 向前迭代器 (ForwardIterator)
可转换为 const_iterator
const_iterator 指向 T 的常迭代器 向前迭代器 (ForwardIterator)
difference_type 有符号整数 必须与 iteratorconst_iteratoriterator_traits::difference_type 相同
size_type 无符号整数 足够大以表示 difference_type 的所有正值

[编辑] 方法与运算符

表达式 返回类型 语义 条件 复杂度
C() C 创建空容器 后置: C().empty() == true 常数
C(a) C 创建 a 的副本 前提: T 必须可复制插入 (CopyInsertable)
后置: a == C(a)
线性
a = b C& 销毁或从 b 的元素移动赋值 a 的所有元素 后置: a == b 线性
(&a)->~C() void 销毁 a 的所有元素并释放所有内存 线性
a.begin() (const_)iterator 指向 a 首元素的迭代器 常数
a.end() (const_)iterator 指向 a 尾元素后一位的元素 常数
a.cbegin()(C++11 起) const_iterator const_cast<const C&>(a).begin() 常数
a.cend()(C++11 起) const_iterator const_cast<const C&>(a).end() 常数
a == b 可转换为 bool std::equal(a.begin(), a.end(), b.begin(), b.end())(C++14 起) 前提: T 必须可比较相等 (EqualityComparable) a.size() != b.size() 则为常数[1],否则为线性
a != b 可转换为 bool !(a == b) 线性
a.swap(b) void 交换 ab 的值 常数[2][3]
swap(a, b) void a.swap(b) 常数[2]
a.size() size_type distance(a.begin(), a.end()) 常数[3]
a.max_size() size_type b.size() ,其中 b 是最大的可能容器 常数[3]
a.empty() 可转换为 bool a.begin() == a.end() 常数
注意
  1. 对于 std::forward_list 始终为线性
  2. 2.0 2.1 (C++11 起)std::array 为线性
  3. 3.0 3.1 3.2 (C++11 前) 非严格常数

给定

  • ij ,容器的 iterator 类型对象,

表达式 i == ji != ji < ji <= ji >= ji > ji - j 中,一者或二者都可以用容器 const_iterator 类型的指代相同元素的对象替换,而不更改语义。

(C++14 起)

[编辑] 容器数据竞争

容器线程安全

[编辑] 其他概念

C
T