【C++】-- STL之list详解(二)

简介: 【C++】-- STL之list详解

10.pop_back( )

删除链表末尾节点

void pop_back();//删除链表末尾节点
1.     l4.pop_back();//删除l4末尾节点
2. 
3. PrintContainer(l4);

11.insert( )

在某一位置插入节点

iterator insert (iterator position, const value_type& val);//在某一位置插入值为val的节点
1.  list<int>::iterator pos = find(l4.begin(), l4.end(), 6);//查找6的位置
2. 
3.  l4.insert(pos, 100);//在6的位置插入100
4. 
5.  PrintContainer(l4);
6.  cout << *pos << endl;

迭代器没有失效:

12.erase( )

iterator erase (iterator position);//删除position位置的节点

pos已经是6的位置了,删除6之后,pos就失效了,变成了野指针,再对pos解引用就会报错

1.  l4.erase(pos);
2.  PrintContainer(l4);
3.  cout << *pos << endl;

需要在erase进行删除后,对迭代器重新赋值,pos就不会是野指针了,代码应该改成这样:

1.     l4.erase(pos);
2.  pos = find(l4.begin(), l4.end(), 12);
3.  PrintContainer(l4);
4.  cout << *pos << endl;

13.swap( )

交换两个同类型list的内容

void swap (list& x);//交换两个同类型list的内容
1.  l4.swap(l3);//交换l3和l4的内容
2.  cout << "l3:  ";
3.  PrintContainer(l3);
4.  cout << "l4:  ";
5.  PrintContainer(l4);

14.clear( )

清空list的内容

void clear();//清空list的内容
1.  l4.clear();//清空l4的内容
2.  PrintContainer(l4);

15.remove( )

删除链表中所有指定值的节点

void remove (const value_type& val);//删除链表中所有值为val的节点
1.  list<int> l5;
2.  l5.push_back(1);
3.  l5.push_back(2);
4.  l5.push_back(2);
5.  l5.push_back(2);
6. 
7.  l5.remove(2);//删除所有值为2的节点
8. 
9.  PrintContainer(l5);

16.unique( )

去重,删除所有值相同的节点,只保留第一个

void unique();//每个节点的值只保留一个
1.     list<int> l6;
2.  l6.push_back(7);
3.  l6.push_back(2);
4.  l6.push_back(2);
5.  l6.push_back(3);
6.  l6.push_back(8);
7.  l6.push_back(8);
8.  l6.push_back(6);
9. 
10.   l6.unique();//去重
11. 
12.   PrintContainer(l6);

注意:但是unique( )只对连续相同值的节点去重,如果节点不连续,就算节点值相同也不会去重

假如l6插入的节点,相同值不连续,unique就去重不了 :

1.  list<int> l6;
2.  l6.push_back(7);
3.  l6.push_back(8);
4.  l6.push_back(2);
5.  l6.push_back(3);
6.  l6.push_back(2);
7.  l6.push_back(8);
8.  l6.push_back(6);
9. 
10.   l6.unique();//去重,达不到目的,因为相同值不连续
11. 
12.   PrintContainer(l6);

所以unique( )必须和排序sort( )结合起来才能去重

17.sort( )

对链表节点排序

void sort();//对链表节点排序
1.     list<int> l6;
2.  l6.push_back(7);
3.  l6.push_back(8);
4.  l6.push_back(2);
5.  l6.push_back(3);
6.  l6.push_back(2);
7.  l6.push_back(8);
8.  l6.push_back(6);
9. 
10.   l6.sort();
11.   PrintContainer(l6);

链表的排序基本没啥用,如果要排序,就存vector了

18.reverse( )

对链表进行逆置

void reverse();//逆置链表
1.  list<int> l6;
2.  l6.push_back(7);
3.  l6.push_back(8);
4.  l6.push_back(2);
5.  l6.push_back(3);
6.  l6.push_back(2);
7.  l6.push_back(8);
8.  l6.push_back(6);
9. 
10.   l6.sort();
11.   PrintContainer(l6);

链表的许多操作,对于做OJ题很有用

相关文章
|
4天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
4天前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
4天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
4天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
|
4天前
|
编译器 C++
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
【C++进阶(三)】STL大法--vector迭代器失效&深浅拷贝问题剖析
|
5天前
|
存储 C++ 容器
c++的学习之路:14、list(1)
c++的学习之路:14、list(1)
16 0
|
5天前
|
存储 算法 C语言
c++的学习之路:9、STL简介与string(1)
c++的学习之路:9、STL简介与string(1)
20 0
|
15天前
|
存储 算法 C++
【C++初阶】STL详解(九) priority_queue的使用与模拟实现
【C++初阶】STL详解(九) priority_queue的使用与模拟实现
21 0
|
5天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
5天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0