STL家族中——list双向链表

最近蒟蒻在研究STL(C++中的标准函数库),那现在蒟蒻就来介绍介绍其中的list容器叭 还有很多成员会在后续的bok中介绍的哦

list双向链表
list容器是一个双向链表,可以高效的进行插入和删除操作

list的定义及初始化

list<int> se;//创建空list
list<int> se(5); //创建含有5个元素的list

对list双向链表进行遍历需要用迭代器进行遍历

list<int>::iterator pl;
for(pl=se.begin();pl!=se.end();pl++{
cout<<*pl<<" ";
}

list常用的操作函数

se.back() ;//返回最后一个元素
se.begin()//返回指向第一个元素的迭代器
se.clear()//删除所有元素
se.empty()//判断list是否为空
se.end();//返回末尾的迭代器
se.erase();//删除一个元素  erase前为迭代器(指针)而不是单纯的数。
//它的作用是使作为参数的迭代器失效,并返回指向该迭代器下一参数的迭代器。
se.front();//返回第一个1元素
se.insert();//插入一个元素到se中
se.max_size();//返回list能容纳的最大元素数量
se.merge();//合并两个list
se.pop_back();//删除最后一个元素
se.pop_front();//删除第一个元素
se.push_back();//在list末尾添加元素
se.push_front();//在list开头添加元素
se.remove();//从list中删除元素
se.remove_if();//按指定条件删除元素
se.resize();//改变list大小
re.reverse();//把list的元素倒转
re.size();//返回list的元素个数
se.sort();//给list排序
se.swap();//交换两个list
se.unique();//删除list中重复的元素

上代码

#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
std::list<int> values;
std::list<int> b;
std::list<int> b1;
std::list<int> b2;
int wanted {22};// What we are looking for
void output(){
 list<int>::iterator pl;//迭代器来遍历
for(pl=values.begin();pl!=values.end();pl++){//遍历开始
cout<<*pl<<" ";
}
cout<<endl;
}
void last(){
cout<<values.back()<<endl;//返回最后一个元素的值
}
void first(){
cout<<values.front()<<endl;//返回元素的第一个值
}

void myinsert(){
b.push_front(2);//从链表前面开始压入值
b.push_front(1);
b.push_back(3);//从链表后面开始压入值
list<int>::iterator it;
it=values.begin();
it++;
// values.insert(it,13);//在it的位置插入13
//values.insert(it,2,13);//在it的位置插入2个13
values.insert(it,b.begin(),b.end());//在it的位置插入b链表从开头到结尾
}
void isempty(){
if(values.empty()==0) cout<<"非空"<<endl;//判断集合是否为空
 else cout<<"空"<<endl;
}
void mydelete(){
list<int>::iterator it;
it=values.begin();
it++;
values.erase(it);//清除元素
for(it=values.begin();it!=values.end();it++){
cout<<*it<<" ";
it++;
}
}

void myclear(){
values.clear();//清除所有元素
}

void binarysearch(){
if(binary_search(values.begin(), values.end(), wanted))//二分查找想要的元素
cout << wanted << " is definitely in there - somewhere..."<<endl;
else
 cout << wanted << " cannot be found - maybe you got it wrong..." << endl;
 }
void mysort(){
values.sort ();//排序   Sort into ascending sequence
}
void my_size(){
cout<<values.max_size()<<endl;//返回list链表能容纳的最大值
}
void my_merge(){
b1.push_back(25);
b1.push_back(36);
b1.push_back(49);
b1.sort();
values.merge(b1);//1.此时b1变成空了 2.用merge时两个原始链表必须是有序的
}

void popfront(){
values.pop_front();//弹出开头的元素
}

void popback(){
values.pop_back();//弹出末尾的元素
}
void myremove(){
values.remove(36);//删除所有为36的元素
}
void myreverse(){
values.reverse();//方转所有的元素
}
void myswap(){
 b2.push_back(99);
b2.push_back(199);
values.swap(b2);//交换两个链表的值
}
int main(){
values.push_back(17);
values.push_back(11);
values.push_back(40);
values.push_back(36);
values.push_back(22);

//isempty();
//myclear();
//isempty();
//last();
//output();
//mydelete();
first();
last();
output();
myinsert();
mysort();
output();
//my_size();
my_merge();
mysort();
output();

popback();
popfront();
output();
myremove();
output();
myreverse();
output();
//myswap();
//output();
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值