C++高级_List容器_STL标准模板库
List容器详解
list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。
list的默认构造函数:
template <typename T>
list<T> zploo; //list采用模板类实现,对象的默认构造形式
list<int> zploo; //定义一个存放int的list容器
list<float> zploo; //定义一个存放float的list容器
list<string> zploo; //定义一个存放string的list容器
/*尖括号内还可定义指针类型 或 自定义类型*/
list的带参数构造:
list.(beg,end); //构造函数 将【beg,end】区间中得元素拷贝给本身(注意:该区间是左闭右开的区间)
list(n,elem); //构造函数将n个elem拷贝给本身
list(const list &zploo); //拷贝构造函数
list的头尾添加和移除操作:
list.push_back(elem); //从容器尾部添加一个元素
list.pop_back(); //删除容器中最后一个元素
list.push_front(elem); //在容器开通插入一个元素
list.pop_front(); //从容器开通移除第一个元素
list的数据存取:
list.front(); //返回第一个元素
list.back(); //返回最后一个元素
list的赋值:
list.assign(beg,end); //将【beg,end】区间中得数据拷贝赋值给本身(注意:该区间位左闭右开的区间)
list.assign(n,elem); //将n个elem拷贝赋值给本身
list& operator= (const list& zploo); //重载等会操作符
list.swap(zploolist); //将zploolist于本身的元素互换
list的大小:
list.size(); //返回容器中元素的个数
list.empty(); //判断容器是否为空
list.resize(num); //重新指定容器的长度位 num ,若容器变长,则以默认值填充新位置。若容器变短,则末尾超出容器长度的元素会被删除
list.resize(num,elem); //重新指定容器的长度位 num ,若容器变长,则以elem填充新位置。若容器变短,则末尾超出容器长度的元素会被删除
list的插入和删除:
//插入
list.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
list.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
list.insert(pos,beg,end); //在pos位置插入【beg,end】区间的数据,无返回值。
//删除
list.clear(); //删除容器内所有的数据
list.erase(beg,end); //删除【beg,end】区间的数据,返回下一个数据的位置
list.erase(pos); //删除pos位置的数据,返回下一个数据的位置。
list.remove(elem); //删除容器中所有与elem值匹配的元素
list的逆序排列:
list.reverse(); //反转链表,比如zploo中包含1,4,7元素,反转后变成了 7,4,1元素
练习演示代码:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <list>
using namespace std;
void testList1()
{
list<int> l;
l.push_back(2);
l.push_back(3);
l.push_back(4);
l.push_back(5);
l.push_back(7);
list<int> l2;
l2.push_back(12);
l2.push_back(13);
l2.push_back(14);
l2.push_back(15);
l2.push_back(17);
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
//2, 3, 4, 5, 7
l.insert(l.begin(), l2.begin(), l2.end()); //12, 13 ,14 ,15 ,17, 2, 3, 4, 5, 7
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
l.insert(l.begin(), 8);
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
//8, 12, 13 ,14 ,15 ,17, 2, 3, 4, 5, 7
list<int>::iterator it = l.end();
l.insert( it, 10, 8);
cout << "----www.zploo.com----" << endl;
//删除所有8的元素
l.remove(8);
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
cout << "----www.zploo.com----" << endl;
//逆序一个链表
l.reverse();
cout << "----www.zploo.com----" << endl;
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
/*
list.clear(); //移除容器的所有数据
list.erase(beg,end); //删除[beg,end)区间的数据,返回下⼀个数据的位置。
list.erase(pos); //删除pos位置的数据,返回下⼀个数据的位置。
lst.remove(elem); //删除容器中所有与elem值匹配的元素。
*/
l.erase(l.begin());
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
//
l.erase(l.begin(), l.end());
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
cout << *it << " ";
}
cout << endl;
l.push_back(2);
l.clear();
if (l.empty() == true) {
cout << "kong " << endl;
}
}
int main(void)
{
testList1();
return 0;
}
最后修改于 2015-10-30