//
List
简介
list 是一个 双向链表容器 , 可高效地进行插入删除元素。
list 不可以随机存取元素, 所以不支持 at.(pos) 函数与 [] 操作符。 It++(ok) it+5(err)
list 是一个 双向链表容器 , 可高效地进行插入删除元素。
list 不可以随机存取元素, 所以不支持 at.(pos) 函数与 [] 操作符。 It++(ok) it+5(err)
#include <list>
#include"iostream" using namespace std; #include"list" void display(list<int>&l1) { list<int>::iterator it = l1.begin();//遍历 while (it != l1.end()) { cout << *it << " "; it++; } cout << endl; }/* list 对象的默认构造 list 采用采用模板类实现,对象的默认构造形式: list<T> lstT; 如: list<int> lstInt; //定义一个存放 int 的 list 容器。 list<float> lstFloat; //定义一个存放 float 的 list 容器。 list<string> lstString; //定义一个存放 string 的 list 容器。//尖括号内还可以设置指针类型或自定义类型。 list 头尾的添加移除操作 list.push_back(elem); //在容器尾部加入一个元素 list.pop_back(); //删除容器中最后一个元素 list.push_front(elem); //在容器开头插入一个元素 list.pop_front(); //从容器开头移除第一个元素*/ int main01() { //list<T>l1;尖括号内可以是基本类型和自定义类型 list<int>l1(3,9); list<int>l2(l1); list<int>l3(l1.begin(),l1.end()); l1.push_front(100); //头部插入元素 l1.push_back(100); //尾部插入元素 display(l1); l1.pop_back(); //弹出头部元素 l1.pop_front(); //弹出尾部元素 display(l1); /* list 的数据存取 list.front(); //返回第一个元素。 list.back(); //返回最后一个元素。 //list<int>::iterator it = l1.begin()+1; //it=it+5;//list 不支持随机访问元素。即[]\at()不可用 */ /* list 与迭代器 list.begin(); //返回容器中第一个元素的迭代器。 list.end(); //返回容器中最后一个元素之后的迭代器。 list.rbegin(); //返回容器中倒数第一个元素的迭代器。 list.rend(); //返回容器中倒数最后一个元素的后面的迭代器。 */ /* list 对象的带参数构造 list(beg, end); //构造函数将[beg, end)区间中的元素拷贝给本身。 注意该区间是闭右开的区间。 list(n, elem); //构造函数将 n 个 elem 拷贝给本身。 list(const list &lst); //拷贝构造函数。 */ /* list 的赋值 list.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。 注意该区间是 左闭右开的区间。 list.assign(n,elem); //将 n 个 elem 拷贝赋值给本身。 list& operator=(const list &lst); //重载等号操作符 list.swap(lst); // 将 lst 与本身的元素互换。 */ return 0; } /*插入与删除元素*/ /*list 的插入 list.insert(pos,elem); //在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置。 list.insert(pos,n,elem); //在 pos 位置插入 n 个 elem 数据, 无返回值。 list.insert(pos,beg,end); //在 pos 位置插入[beg,end)区间的数据, 无返回值。 */ int main02() { //插入元素 list<int>l1(3, 10); list<int>l2(2,1); l1.insert(l1.begin(), 100);//头部插入100 l1.insert(l1.end(),100);//尾部插入100 list<int>::iterator it = l1.begin(); for (int i = 0; i < 3; i++) { it++;//it=3 } l1.insert(it, 3, 5);//list链表的结点是从0开始计数,第四个位置插入555 display(l1);//100,10,10,5,5,5,10,100 l1.insert(it, 0);//第七个位置插入0,插入后,it自动增加,所以it=6; display(l1);//100,10,10,5,5,5,0,10,100 l1.insert(it, l2.begin(), l2.end());//it=7,第8个位置插入l2 display(l1);//100,10,10,5,5,5,0,1,1,10,100 //删除元素 /*list 的删除 list.clear(); //移除容器的所有数据 list.erase(beg,end); //删除[beg,end)区间的数据, 返回下一个数据的位置。 list.erase(pos); //删除 pos 位置的数据, 返回下一个数据的位置。 lst.remove(elem); //删除容器中所有与 elem 值匹配的元素。 */ l1.remove(10);//移除所有10; display(l1);//100,5,5,5,0,1,1,100 list<int>::iterator it1 = l1.begin(); l1.erase(it1); //5,5,5,0,1,1,100 display(l1); list<int>::iterator first = l1.begin(); list<int>::iterator last = l1.begin(); last++; last++; last++;//3 l1.erase(first,last);//0,1,1,100 display(l1); l1.clear(); cout << "l1.Size: "<<l1.size() << endl; return 0; } /*操作函数*/ /*list 的正反序排列 lst.sort() lst.reverse();*/ int main03() { list<int>l1(3, 10); l1.push_front(100); l1.push_back(5); l1.push_back(1); l1.push_back(25); l1.push_back(100); l1.sort();//1,5,10,10,25,100 正序排列 display(l1); l1.reverse();//100,25,10,10,5,1 反序排列 display(l1); return 0; } int main() { main01();//初始化 main02();//插入和删除 main03(); system("pause"); return 0; }