第九层(11):STL之常用遍历算法

简介: 第九层(11):STL之常用遍历算法

前情回顾


在上一块石碑中,我学到了函数对象,同时下一块石碑也显露出来…


🚄上章地址:第九层(10):STL之函数对象


常用算法


算法主要是由头文件:

#include<algorithm>
#include<functional>
#include<numeric>


其中algorithm是最大的一个头文件,它其中包含是比较,交换,查找,遍历,复制等等,functional就是内建函数对象,numeric体积很小,其中有一些简单的数学运算的模板函数


常用遍历算法


常用的遍历算法有两种:

for_each//遍历容器
transform//搬运容器到另一个容器


for_each


for_each(beg,end,_func)


beg指的是开始迭代器,从哪里去遍历,end指结束迭代器,到哪里结束,_func表示一个函数,是在遍历的时候进行的操作,例如打印,可以用函数对象

使用:


#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
void print(int a)
{
  cout << a << " ";
}
void test1()
{
  vector<int> v;
  for (int i = 0; i < 10; ++i)
  {
  v.push_back(i);
  }
  for_each(v.begin(), v.end(), print);
  cout << endl;
}
int main()
{
  test1();
  return 0;
}


transform


transform(beg1,end1,beg2, _func)


beg1是原容器的其实迭代器,end1是的结束迭代器,beg2是目标容器的开始迭代器,_func在这里为函数或者函数对象,可以在搬运途中对搬运的元素进行操作,比如加多少减多少,这里有一个需要注意的地方,目标i容器要记得提前开辟好容器空间,保证能放下原容器的元素

使用:


#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
int add(int a)//对拷贝过来的数进行加一百的操作
{
  return a += 100;
}
void print(int a)
{
  cout << a << " ";
}
void test1()
{
  vector<int> v;
  for (int i = 0; i < 10; ++i)
  {
  v.push_back(i);
  }
  for_each(v. begin(), v.end(), print);
  cout << endl;
  vector<int> v1;
  v1.resize(v.size());//保证可以放下原容器
  transform(v.begin(), v.end(), v1.begin(), add);
  for_each(v1.begin(), v1.end(), print);
  cout << endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


下一座石碑


这座石碑倒下了,露出了下一座石碑…


😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔

🚀专栏:C++爬塔日记

🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉


相关文章
|
7天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
10天前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
29 5
|
10天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
19 2
|
13天前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
24 0
|
1月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
22 0
|
1月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
24 0
|
4月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
40 1
|
3月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
79 0
|
4月前
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
68 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
|
4月前
|
算法 JavaScript
JS 【详解】二叉树(含二叉树的前、中、后序遍历技巧和算法实现)
JS 【详解】二叉树(含二叉树的前、中、后序遍历技巧和算法实现)
48 0