//
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;
}