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






原创粉丝点击