例题:C++中删除链表中的奇数元素
来源:互联网 发布:sqlserver安装错误 编辑:程序博客网 时间:2024/06/05 18:45
C++中表示链表的容器是forward_list。
首先给链表赋一个初始值,用列表初始化的方法:forward_list lst{1,2,3,4,5,6,7};
删除链表中元素的语句是erase_after。如lst.erase_after(iter),iter是一个迭代器,和erase语句不同的是,erase删除的是这个迭代器所指元素,而erase_after删除的是迭代器所指后面的那个元素。
判断一个数是否为奇数用的是指向这个数的迭代器,但我们只能删除这个迭代器之后的元素。怎么办呢?c++还提供了before_begin(),它指的位置是第一个元素之前的位置,和end()感觉差不多。假如我们判断出来了第一个元素是奇数,要删除它,那么就:auto it = lst.before_begin();再lst.erase_after(it);按照这个思路类推。
整体流程大概是:从链表最开始,我们需要两个迭代器,一个指着第一个元素,叫做iter。一个指向第一个元素之前的元素,叫做iter_begin。我们使用iter依次判断每个元素是否是奇数,直到到达end为止。
如果是奇数,那么就erase_after(iter_begin)。然后要移动迭代器的位置使它们接着判断。erase_after返回了被删除元素的下一个位置,所以我们要让iter等于它,也就是iter = lst.erase_after(iter_begin)。我们不需要移动iter_begin的位置。
如果不是奇数,就要移动两个迭代器继续判断。iter_begin和iter都++。
这是大体思路。
我的代码如下:
#include <iostream>
#include <forward_list>
using namespace std;
int main()
{
forward_list<int> lst{1,2,3,4,5,6};
auto iter_begin = lst.before_begin();
auto iter = lst.begin();
while (iter != lst.end())
{
if(*iter%2==1)
{
iter=lst.erase_after(iter_begin);
}
else
{
iter_begin++;
iter++;
}
}
for (auto it : lst)
cout << it << endl;
system("pause");
return 0;
}
- 例题:C++中删除链表中的奇数元素
- 删除链表奇数元素
- 删除链队奇数元素
- [C++]Remove Linked List Elements 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- 删除链表中的元素
- python实现KNN算法中遇到的问题
- 【Linux】修改mysql的root密码
- iOS 获取手机型号,系统版本
- GCC主要数据结构之struct gcov_info
- Spring声明式事务配置管理方法
- 例题:C++中删除链表中的奇数元素
- tensorflow学习笔记十五:tensorflow官方文档学习 TensorBoard: Embedding Visualization
- V4L2应用程序框架学习笔记
- 自定义textview背景图
- calendar中的时间格式
- 动态申请二维数组
- C++中的static关键字的总结(转)
- iOS随笔之获取可用空间及某个文件或文件夹的大小及判断文件是否存在
- soa-面向服务项目搭建