2.list
STL中的list是一个双向链表,可以从头到尾或从尾到头访问链表中的结点,结点可以是任意数据类型。链表中节点的访问尝尝通过迭代器进行。可用front成员函数找到list的第一个元素,用back找到list的最后一个元素。迭代器iterator用于指向链表的节点,通过它可以遍历整个链表。
(1)链表的构造(模板参数T时链表的数据类型)
list
list
list
list
list
c.~list
(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.issert(pos,n,e) //在pos位置插入元素e的n个副本,没有返回值
c.insert(pos,beg,end) 在pos位置插入区间[beg,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内[beg,end]区间的所有元素转换到c1内pos前
c.sort() //以operator<为准则,对所有元素排序
c.sort(op) //以op()为准则面对所有元素排序
c1.merge(c2) //c2中的全部元素合并到c1,若c1,c2都已排序,则合并侯list仍有序
c.rev erve() //将所有元素反序
说明:op可以是less<>或greater<>之一,应用时需在<>中写上类型。
简例:
#includeusing namespace std; int main() { list L1,L2; int a1[]={100,90,80,70,60}; int a2[]={30,40,50,60,60,60,80}; for(int i=0;i<5;i++) L1.push_back(a1[i]); for(int i=0;i<7;i++) L2.push_back(a2[i]); L1.reverse(); //将L1链表倒序 L1.merge(L2); //将L2合并到L1链表中 cout<<"L1的元素个数为:"<



