文章目录
一、顺序和关联容器共同支持的成员函数
- begin() 指向第一个元素
- end() 指向最后一个元素
- erase() 删除容器中的一个或多个元素
- rbegin() 指向按反顺序的第一个元素
- rend() 指向按反顺序的末端位置
- clear() 删除容器中的所有元素
二、vector
向量容器,类似于动态数组,比数组灵活
1. vector的构造
vector<T> c //产生一个空vector,其中没有任何元素
vector<T> c1(c2) //产生同型c2向量的一个复本(c2所有元素被复制给c1)
vector<T> c(n,elem) //产生大小为n的向量c,且每个元素都是elem
vector<T> c(beg,end) //产生一个向量,并用区间[beg,end]作为元素的初值
2. 赋值操作
c1=c2 //将向量c2的元素全部赋值给c1
c.assign(n,e) //复制n个元素e,赋值给向量c
c.assign(beg,end) //将区间[beg,end]内的元素赋值给c
c1.swap(c2) //将c1与c2向量互换
3. 直接访问向量元素
c.at[n] //返回下标n所标识的元素,若下标越界,返回“out_of_range”
c[n] //返回下标n所标识的元素,不进行范围检查
c.front() //返回第一个元素
c.back() //返回最后一个元素
4. vector向量的常用操作
c.insert(pos,e) //在pos位置插入e的副本,并返回新元素的位置
c.insert(pos,n,e) //在pos位置插入e的n个副本,不返回值
c.insert(pos,beg,end) //在pos位置插入区间[beg,end]内的所有元素
c.push_back(e) //在尾部插入元素e
c.push_back() //删除最后一个元素
c.erase(pos) //删除pos位置的元素
c.erase(beg,end) //删除区间[beg,end]内的所有元素
c.clear() //删除所有元素,清空容器
c.size() //返回向量c中的元素个数
c.resize(n) //将c重新设置为大小为n个元素的向量,如果n比原来的元素多,则多出的元素常被初始化为0
上述成员函数参数中涉及的位置pos都与vector的迭代器有关,要操作这些成员函数,必须定义对应向量的迭代器,并通过迭代器访问pos指向的向量元素
二、list
双向链表,可以从头到尾或从尾到头访问链表中的节点,节点可以是任意数据类型。链表中节点的访问常常通过迭代器进行。
1. 链表的构造(模板参数T是链表的数据类型)
list<T> c //建立一个空链表c
list<T> c1(c2) //建立与c2同型的链表c1(c2的每个元素都被复制)
list<T> c(n) //建立具有n个元素的链表c,元素值由默认构造函数产生
list<T> c(n,e) //建立n个元素的链表c,每个元素的值都是e
list<T> c(beg, end) //建立链表c,并用[beg, end]区间内的元素作初始化
c.~list<e>() //销毁链表c,释放内存
2. 链表赋值
c1=c2 //将c2链表的全部元素赋值给c1链表
c1.assign(n,e) //将元素e拷贝n次到c1链表
c.assign(beg,end) //将区间[beg,end]的元素赋值给c
c1.swap(c2) //将链表c1和c2的全部元素互换
3. 链表存取
c.front() //返回第一个元素,不检查元素存在与否
c.back() //返回最后一个元素,不检查元素存在与否
4. 链表插入和删除
c.insert(pos,e) //在pos位置插入元素e的副本,并返回新元素的位置
c.insert(pos,n,e) //在pos位置插入元素e的n个副本,没有返回值
c.insert(pos, beg, end) //在pos位置插入区间[ bed, end]内的全部元素
c.push_back(e) //在尾部追加一个元素e的副本
c.pop_back(e) //删除最后一个元素
c.push_front(e) //在表头插入元素e的一个副本
c.pop_front() //删除第一个元素
c.remove(val) //删除值为val的元素
c.remove_if(op) //删除所有“造成op(e)结果为true”的元素
c.erase(pos) //删除pos指向的元素,返回下一元素的位置
c.erase(beg, end) //删除区间[beg,end]内的元素,返回下一元素位置
c.resize(n) //将链表c的大小重新设置为n
c.clear() //删除链表所有元素,将整个容器置空
5. 链表的特殊操作
c.unique() //删除相邻重复元素,只留一个
c.unique(op) //若存在若干相邻且使op()操作为true的元素,删除重复,只留一个
c1.splice(pos, c2) //将c2内的所有元素转换到c1内,pos之前
c1.splice(pos, c2, c2pos) //将c2链表的c2pos所指元素移到c1内的pos指向的位置
c1.splice(pos, c2, c2beg, c2end) //将c2内[c2beg, c2end]区间的所有元素转换到c1内pos之前
c.sort() //以operator<为准则,对所有元素排序
c.sort(op) //以op()为准则,对所有元素排序
c1.merge(c2) //c2合并到c1,若合并前有序则合后仍有序
c.reverse() //将所有元素反序
三、stack
堆栈是一种较简单的容器,是一种受限制的向量,只允许在一端存取变量
LIFO(Last in first out)
主要操作
push() //将第一个元素加入stack内,加入的元素放在栈顶
top() //返回栈顶元素元素值
pop() //删除栈顶元素