C++ 标准库提供了一组顺序容器,用于存储和管理元素的集合。以下是 C++ 中常用的顺序容器:
std::vector
是一个动态数组,支持快速随机访问。std::deque
支持在两端快速插入和删除元素。std::list
是一个双向链表,支持在任何位置快速插入和删除元素。std::forward_list
是一个单向链表,每个元素只有一个指向下一个元素的指针。std::array
是一个固定大小的数组,大小在编译时确定。std::string
专门用于存储和操作字符串的容器。std::basic_string<char>
的特化版本,可以动态增长和缩减。vector
, deque
, list
, 和 forward_list
。deque
和 list
。vector
, deque
, 和 list
。deque
和 list
。vector
, deque
, 和 list
。vector
, deque
, 和 list
。at(index)
:返回指定位置的元素引用,带边界检查。operator[]
:返回指定位置的元素引用,不带边界检查。erase(iterator)
:移除迭代器指向的元素或一段元素区间。clear()
:移除容器中的所有元素。resize(n)
:改变容器大小,适应新的元素数量。swap(container)
:交换两个同类型容器的内容。begin()
/ end()
:返回指向容器第一个/尾后元素的迭代器。rbegin()
/ rend()
:返回指向容器最后一个/尾前元素的逆向迭代器。cbegin()
/ cend()
:返回指向容器第一个/尾后元素的常量迭代器。capacity()
:返回容器不重新分配内存时的最大容量。list<string> lst;
auto iter = lst.begin();
while (cin >> word)
iter = lst.insert(iter, word); // 等价于调用 push_front
vector<int> vi = {0,1,2,3,4,5,6,7,8,9};
auto iter = vi.begin();
while (iter != vi.end()) {
if (*iter % 2) {
iter = vi.insert(iter, *iter);
iter += 2;
} else
iter = vi.erase(iter);
}
当向 vector 添加新元素,而当前的存储空间不足以容纳更多元素时,vector 将执行以下步骤来增长其容量: