容器:一种特殊的类型,其对象可以放置其他类型的对象(元素)
支持的操作有:添加,删除,索引,遍历
容器的分类:
序列容器:其中的对象有序排列,使用整数值进行索引
关联容器:其中的对象顺序并不重要,使用键进行索引
适配器:调整原有容器的行为,使得对外展现出新的类型,接口,或返回新的元素.
生成器:构造元素序列
迭代器: 用于指定容器的一段区间,以执行遍历,删除等操作
获取迭代器:c/begin() c/end() c/rbegin() c/rend() r--reverse反向迭代器
迭代器的分类:
输入/输出迭代器 前向迭代器 双向迭代器 随机访问迭代器
每个迭代器都支持特定的操作. 输入迭代器和输出迭代器比较特殊,它们不是把数组或容器当做操作对象,而是把输入流/输出流作为操作对象.前向迭代器只支持++p;p++,p* .双向迭代器支持++p p++ --p p-- p*,随机迭代器支持最多
迭代器是什么,C++ STL迭代器(iterator)用法详解
std::vector2.序列容器x{1,2,3,4,5}; auto b=x.begin(); b指向x的第一个元素 auto e=x.end(); e指向x中最后一个元素的下一位 for(auto ptr=b;b!=e;++ptr) { std::cout<<*ptr<<' '; } cbegin() cend() 只读迭代器
arraySTL提供了多种序列容器模板:
--array 元素个数固定的序列容器
--vector 元素连续储存的序列容器
--forward_list/list 基于链表/双向链表的容器
--deque 分段连续存储的容器 vector与list的折中
--basic_string 对字符串专门的支持
-需要使用元素类型来实例化容器模板,从而构造可以保存具体类型的容器
-不同容器提供的借口大致相同,但是根须容器的底层结构差异,内部实现复杂度不同
-对于复杂度过高的操作,提供了相对较难使用的借口或者不提供相应的借口
C++ array(STL array)容器用法详解
array容器模板:具有固定长度的容器,期内部维护了一个內建数组,与內建数组相比提供了复制操作. 包含头文件#include std标准命名空间
template
struct array;
构造: arraya={}; 全为0 array a{1,}; 第一个为1 其余全为0 array a; 默认随机值 元素访问: array a{1,2,3}; cout vector C++ STL vector容器详解
vector容器模板:元素数目可变
vector内部维护了 size_t size(大小) size_t cap(容量) T*buffer (指向连续内存的指针)
一般vector会多分配一倍的内存,来提高性能. 当本段内存分配满了,就会重新找一段连续的内存空间,buffer指向它的首地址.
list/forward_list deque 分段连续存储 basic_string 3.关联容器 4.适配器与生成器接口:
-容量相关 capacity/reserve/shrink_to_fit
reverse() 开辟多好个类型的空间 shrink_to_fit 释放多余的内存
-附加元素接口: push_back emplace_back
push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素); emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。
元素插入接口: insert emplace
元素删除接口: pop_back erase clear
Notes:
-vector不提供push_front/pop_front接口 可以使用insert/erase模拟 但是效率不高
-swap效率较高 直接交换指针的指向即可
-写操作可能会导致迭代器失效
迭代器失效的操作:
swap clear = assign reserve shrink_to_fit erease push_back emplace_back
insert emplace resize pop_back
改变内存的操作都可能会使迭代器失效 ,



