list
来源:互联网 发布:淘宝店的发展前景 编辑:程序博客网 时间:2024/05/22 10:28
list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表。对于链表的迭代器只可以通过”++“或”--“的操作将迭代器移动到后继/前驱节点元素处,而不能进行+n或-n的操作。
1.创建list对象
list<int> l;//创建空链表 list<int> l(10);//创建具有10个元素的空链表2.元素插入和遍历
插入有三种方式
①采用push_back()方法往尾部插入新元素,链表自动扩张
②采用push_front()方法往首部插入新元素,链表自动扩张
③采用insert()方法往迭代器位置插入新元素,链表自动扩张
#include<bits/stdc++.h> using namespace std; int main() {list<int> l;//创建空链表 l.push_back(10);//往链表最后面插入新元素 l.push_front(99);//往链表最前面插入新元素 list<int>::iterator it;it = l.begin();it++;//只能++ --不能+n -nl.insert(it,66); //往链表it位置插入新元素 for(it = l.begin(); it != l.end(); it++){cout << *it << endl;} return 0;}也可以使用反向迭代器reverse_iterator反向遍历。
3.元素删除
①使用erase()删除,可以删除某个迭代器位置的元素,或者删除某个迭代器区间的元素
②使用pop_front删除链表首元素和pop_back()删除链表尾元素
③使用remove()删除链表中一个元素,值相同的元素都会被删除
④使用unique()剔除连续重复元素,只保留一个
#include<bits/stdc++.h> using namespace std; int main() {list<int> l;//创建空链表 for(int i = 0; i < 10; i++){l.push_back(i);if(i == 5){l.push_back(i);}if(i == 6){l.push_back(i);l.push_back(i);}}list<int>::iterator it,itt;for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;printf("删除第三个元素为:\n");it = l.begin();it++;it++;l.erase(it);for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;printf("删除第一个元素到第三个元素为:\n");it = l.begin();itt = l.begin();itt++;itt++;itt++; l.erase(it,itt);for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;printf("删除第一个元素和最后一个元素为:\n");l.pop_front();l.pop_back();for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;printf("删除值为5的元素为:\n");l.remove(5);for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;//剔除连续重复元素为l.push_back(6); l.push_back(6); printf("在结束位置插入两个6为:\n");for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;l.unique();printf("去重为:\n");for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl; return 0;}
4.元素查找
alogorithm中的find()函数,list没有自带的find函数
#include<bits/stdc++.h>using namespace std; int main() {list<int> l;//创建空链表 for(int i = 0; i < 10; i++){l.push_back(i);}list<int>::iterator it;for(it = l.begin(); it != l.end(); it++){cout << *it << " ";}cout<<endl;it = find(l.begin(),l.end(),2); if(it != l.end()) cout << (*it) << endl; else printf("not found it\n"); it = find(l.begin(),l.end(),50); if(it != l.end()) cout << (*it) << endl; else printf("not found it\n"); return 0;}
5.排序
list排序需要依靠list自带的sort函数。自定义排序(回头补)。。。
#include<bits/stdc++.h>using namespace std; bool cmp(int a, int b)//从大到小排序 {return a > b;}int main() {list<int> l;//创建空链表 for(int i = 0; i < 10; i++)//插入0-9 {l.push_back(i);}list<int>::iterator it;l.sort(cmp);//排序 for(it = l.begin(); it != l.end(); it++){cout<<(*it)<<" ";} return 0;}
阅读全文
1 0
- List
- list
- List
- LIST
- list
- list
- List
- list
- list
- List
- list
- LIST
- List
- List
- List
- list
- list
- list
- 初装linux的一些配置
- java字符解码与编码
- 数组最长连续递增(+1)子序列
- hduoj 2009
- Python根据文件名批量转移图片
- list
- 算法训练 最大最小公倍数
- 关于配置spring中dbcp2时错误java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z的解决
- docker 一些批量操作
- GIC Interrupt Map --- Linux Kernel 实现赏析
- Spring的几种常见异常
- 超实用Intellij IDEA快捷键
- 进程间通信(二)
- 简述“自顶向下,逐步求精”