<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_48748418的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_48748418</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_48748418]]></copyright><item><title><![CDATA[C++——函数指针]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/131379777</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/131379777</guid><author>m0_48748418</author><pubDate>Sun, 25 Jun 2023 16:00:37 +0800</pubDate><description><![CDATA[在C++中，函数指针是指向函数的指针变量。它允许将函数作为参数传递给其他函数、动态选择调用的函数以及在运行时改变函数的行为。函数，然后通过函数指针调用函数1。接着，我们改变函数指针的指向，使其指向。使用括号将函数指针变量括起来，再加上参数列表来调用函数。将函数名赋值给函数指针变量，可以使用取址运算符。在上面的示例中，我们声明了一个函数指针类型。函数，并通过函数指针调用函数2。，它们与函数指针类型匹配。函数中，我们先将函数指针。是函数指针变量的名称，]]></description><category></category></item><item><title><![CDATA[OpenCV——点云投影到图像中]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/131348345</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/131348345</guid><author>m0_48748418</author><pubDate>Fri, 23 Jun 2023 10:36:18 +0800</pubDate><description><![CDATA[读取一张照片和一张 pcd， 根据标定的内参和外参，将点云投影到图像中，用于判断雷达相机外参标定是否准确。：投影部分区域的点云到图像中，不要全部都投。（一般选取标定板所处位置的点云）]]></description><category></category></item><item><title><![CDATA[C++——哈希表]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130876419</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130876419</guid><author>m0_48748418</author><pubDate>Thu, 25 May 2023 22:06:12 +0800</pubDate><description><![CDATA[首先将  nums1  的所有元素存入哈希表中，然后遍历  nums2，把在哈希表中出现的元素加入到交集中，同时在哈希表中将该元素删除，避免元素重复计算。unordered_map 是基于哈希表的关联容器，提供了高效的插入、查找和删除操作。哈希表（Hash table），也被称为散列表，是一种常用的数据结构，用于实现键-值对的存储和检索。假设有两个数组  nums1  和  nums2，求出它们的交集并返回，其中返回的交集元素要去重。下面是哈希表在  C++  中的一个经典例子：求解两个数组的交集。]]></description><category></category></item><item><title><![CDATA[C++——图]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130814662</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130814662</guid><author>m0_48748418</author><pubDate>Mon, 22 May 2023 21:59:21 +0800</pubDate><description><![CDATA[图是由节点（顶点）和连接节点的边组成的一种非线性数据结构。它用于表示不同对象之间的关系或网络结构。图可以用于建模和解决许多现实世界中的问题，例如社交网络分析、路线规划、图像处理等。在图中，节点表示实体或对象，而边表示节点之间的关系。边可以是有向的（具有方向）或无向的（没有方向），并可以具有权重或标签来表示边的属性或距离。]]></description><category></category></item><item><title><![CDATA[C++——广度优先搜索]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130793200</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130793200</guid><author>m0_48748418</author><pubDate>Sun, 21 May 2023 16:22:56 +0800</pubDate><description><![CDATA[由于广度优先搜索是逐层遍历，从根节点开始，先输出根节点的值，然后按照从左到右的顺序依次输出每一层的节点值。广度优先搜索（Breadth-First Search，BFS）是一种图遍历算法，它从起始节点开始逐层扩展搜索，直到找到目标节点或遍历完整个图。首先构建了一个示例的二叉树，然后调用BFS函数执行广度优先搜索，并输出遍历的结果。请注意，广度优先搜索需要注意避免重复访问节点，通常使用一个额外的数组或集合来记录已访问的节点。4、遍历当前节点的所有邻居节点，若邻居节点未被访问过，则标记为已访问并将其加入队列。]]></description><category></category></item><item><title><![CDATA[C++——深度优先搜索]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130792696</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130792696</guid><author>m0_48748418</author><pubDate>Sun, 21 May 2023 15:47:53 +0800</pubDate><description><![CDATA[它从起始节点开始，沿着一条路径尽可能深地探索，直到无法继续或达到目标节点，然后回溯到前一节点，继续探索其他路径，直到遍历完所有节点或找到目标。在深度优先搜索中，每个节点都会被访问且仅被访问一次。如果某个节点的邻居节点已经被访问过，那么该节点将被跳过。在树的问题中，深度优先搜索可以用于查找树的特定节点或进行树的遍历。需要注意的是，深度优先搜索可能会陷入无限循环，因此在应用时需要合理设置终止条件和避免重复访问节点。3、若存在未访问的邻居节点，则选择一个作为当前节点，标记为已访问，并重复步骤2。]]></description><category></category></item><item><title><![CDATA[C++——递归]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130774299</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130774299</guid><author>m0_48748418</author><pubDate>Fri, 19 May 2023 21:23:28 +0800</pubDate><description><![CDATA[递归关系则描述了如何将原问题划分为更小的子问题，并将它们结合起来得到原问题的解。否则，根据递归关系，将问题划分为计算第 n-1 项和第 n-2 项的子问题，并将它们的结果相加。在递归调用过程中，每一次递归都会使问题规模减小，直到达到递归基的情况。递归函数的执行过程可以形象地表示为一个递归树，每个节点代表一次函数调用，树的叶节点对应于递归基。递归的时间复杂度通常与递归的深度成正比，而空间复杂度则取决于递归树的高度和每次递归调用所需的额外空间。需要注意的是，递归函数必须满足结束条件，以避免无限递归。]]></description><category></category></item><item><title><![CDATA[C++——双指针]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130753514</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130753514</guid><author>m0_48748418</author><pubDate>Thu, 18 May 2023 19:16:28 +0800</pubDate><description><![CDATA[2、左右指针：在有序数组或字符串中，将一个指针指向开头，另一个指针指向末尾，通过根据问题的要求移动指针来搜索目标值、判断是否满足某个条件等。3、对撞指针：在有序数组或字符串中，将两个指针分别指向开头和末尾，并同时向中间移动，常用于寻找两个数之和、判断是否回文串等问题。1、快慢指针：使用两个指针以不同的速度遍历数组或链表，常用于解决问题如判断链表是否有环、寻找链表的中间节点等。4、快慢指针替换：在某些情况下，可以使用快慢指针来替换传统的单指针遍历，以提高算法的效率。]]></description><category></category></item><item><title><![CDATA[C++——动态规划]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130740899</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130740899</guid><author>m0_48748418</author><pubDate>Thu, 18 May 2023 10:05:30 +0800</pubDate><description><![CDATA[它通过将问题分解为更小的子问题，并利用子问题的解来构建原问题的解。在上述示例中，我们通过创建一个二维数组dp来保存子问题的解，其中dp[i][j]表示前i个物品放入容量为j的背包中所能达到的最大价值。动态规划的核心思想是存储并重复使用子问题的解，以避免重复计算。3、确定状态转移方程：找到子问题之间的关系，以及如何利用子问题的解来构建原问题的解。2、确定状态：找到描述子问题的状态变量，以便构建动态规划表。5、求解原问题：根据填充好的表格，求解原问题的解。1、定义子问题：将原问题拆解为较小的子问题。]]></description><category></category></item><item><title><![CDATA[C++——容器（map）]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130730546</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130730546</guid><author>m0_48748418</author><pubDate>Wed, 17 May 2023 17:21:13 +0800</pubDate><description><![CDATA[在C++中，map、multimap和unordered_map是三种不同的容器，用于存储键值对。它们各自有不同的特点和适用场景。]]></description><category></category></item><item><title><![CDATA[C++——滑动窗口]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130714747</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130714747</guid><author>m0_48748418</author><pubDate>Tue, 16 May 2023 21:44:50 +0800</pubDate><description><![CDATA[滑动窗口算法可以通过维护两个指针，一个指向窗口的起始位置，一个指向窗口的结束位置，并根据目标字符串的出现情况来移动窗口，从而找到最小的覆盖子串。滑动窗口算法可以通过保持一个窗口的和，将窗口向右移动一位，并根据需要调整窗口的大小来解决这个问题。滑动窗口算法的关键是确定窗口的大小和如何移动窗口。滑动窗口算法的基本思想是通过调整窗口的起始位置和结束位置，以有效地处理数据。3、根据问题的要求，调整窗口的起始位置和结束位置，使窗口滑动到下一个位置。1、初始化窗口的起始位置和结束位置，通常为数组或字符串的开头。]]></description><category></category></item><item><title><![CDATA[C++——容器（set)]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130714395</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130714395</guid><author>m0_48748418</author><pubDate>Tue, 16 May 2023 21:18:37 +0800</pubDate><description><![CDATA[插入元素：使用 insert() 函数将元素插入集合中，对于std::unordered_set集合，如果元素已经存在，则插入操作被忽略。对于std::set和std::multiset集合插入新元素时，容器会根据元素的键值将其放置在适当的位置，以保持元素的有序性。查找元素：使用 find() 函数来查找元素，它返回一个指向要查找的元素的迭代器，如果元素不存在，则返回 end()。内部元素按照键的排序顺序进行存储，重复元素的插入会导致多个相同键的元素存在。每个元素在容器中是唯一的，即不允许重复元素。]]></description><category></category></item><item><title><![CDATA[C++——二分法]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130712993</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130712993</guid><author>m0_48748418</author><pubDate>Tue, 16 May 2023 20:01:09 +0800</pubDate><description><![CDATA[如果中间元素等于目标元素，那么查找成功，返回中间位置。如果中间元素大于目标元素，说明目标元素可能在左半部分，更新结束位置为中间位置减1。如果中间元素小于目标元素，说明目标元素可能在右半部分，更新起始位置为中间位置加1。它的基本思想是将查找范围逐渐缩小一半，直到找到目标元素或确定目标元素不存在。如果目标元素不存在于列表中，那么在某个时刻，起始位置将大于结束位置，此时可以确定目标元素不存在。的函数，它接受一个有序整数数组和一个目标元素作为输入，并返回目标元素在数组中的索引。如果目标元素不存在，函数返回-1。]]></description><category></category></item><item><title><![CDATA[C++——贪心算法]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130692241</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130692241</guid><author>m0_48748418</author><pubDate>Mon, 15 May 2023 20:36:52 +0800</pubDate><description><![CDATA[在上述示例中，我们定义了一个greedyCoinChange函数，它接收一个硬币面额的向量coins和需要找零的金额amount。在main函数中，我们定义了一组硬币面额和需要找零的金额，并调用greedyCoinChange函数来获取找零的结果。问题描述如下：给定一些不同面额的硬币和一个需要找零的金额，找出最少的硬币数量来凑出该金额。贪心算法的基本思想是，每一步选择当前情况下看起来最好的解决方案，而不考虑之后可能发生的情况。1、确定问题的最优子结构：问题的最优解可以通过子问题的最优解来构建。]]></description><category></category></item><item><title><![CDATA[C++——auto]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130481327</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130481327</guid><author>m0_48748418</author><pubDate>Thu, 04 May 2023 09:59:09 +0800</pubDate><description><![CDATA[auto是C++11引入的一个关键字，它可以自动推断变量的类型。需要注意的是，自动类型推断并不是万能的，有时候推断出的类型可能与我们期望的不同，此时需要手动指定变量类型。此外，对于函数参数的类型，auto并不能代替，函数定义时必须显式地指定参数类型。上面的代码中，我们使用auto关键字推断函数calculate的返回值类型为int。上面的代码中，我们使用auto关键字定义了迭代器it，编译器会自动推断出它的类型。2.  推断STL容器中的迭代器类型。3.  函数返回值类型推断。1.  推断基本类型变量。]]></description><category></category></item><item><title><![CDATA[C++——迭代器]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130481229</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130481229</guid><author>m0_48748418</author><pubDate>Thu, 04 May 2023 09:54:37 +0800</pubDate><description><![CDATA[C++中的迭代器是一种对象，可以用于遍历容器类型（如vector、list等）中的元素。C++中有多种类型的迭代器，包括正向迭代器、反向迭代器、常量迭代器等。其中，container表示容器类型（如vector、list等），iterator表示迭代器类型，it表示定义的迭代器对象名称。-  常量反向迭代器（const_reverse_iterator）：可以访问被定义为const的容器中的元素，但不能修改它们。C++中有多种迭代器类型，如正向迭代器、反向迭代器、常量迭代器等。]]></description><category></category></item><item><title><![CDATA[C++——堆区、栈区]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130476576</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130476576</guid><author>m0_48748418</author><pubDate>Wed, 03 May 2023 20:15:51 +0800</pubDate><description><![CDATA[栈区是一段线性的内存区域，它用于存储程序中函数调用时创建的局部变量、函数参数、返回值和其他函数调用相关的信息。栈区的特点是大小固定，程序在执行时自动分配和释放，因此内存管理是由编译器自动完成的。堆区的特点是大小不确定，程序必须显示地分配内存，并在使用后显示地释放内存。堆区的使用依赖于动态内存分配，例如`new`和`delete`操作符。在这个示例中，我们使用了栈区和堆区来创建一个包含5个整数的数组。总之，栈区和堆区都是C++中常见的内存管理技巧。了解它们之间的区别和用法是编写高效和健壮程序的基础。]]></description><category></category></item><item><title><![CDATA[C++——转义字符]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130364842</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130364842</guid><author>m0_48748418</author><pubDate>Wed, 26 Apr 2023 17:01:30 +0800</pubDate><description><![CDATA[在上面的示例程序中，我们使用了转义字符来输出一些特殊字符，例如制表符、换行符、双引号、单引号和反斜杠。注意，在输出反斜杠字符时，我们需要使用两个反斜杠，因为反斜杠本身也是一个转义字符。在C++中，转义字符用于表示一些特殊字符，例如换行符、制表符、双引号、反斜杠等等。]]></description><category></category></item><item><title><![CDATA[C++——文件操作]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130283423</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130283423</guid><author>m0_48748418</author><pubDate>Fri, 21 Apr 2023 10:56:23 +0800</pubDate><description><![CDATA[可以使用  `std::filesystem`  中的函数来获取文件的属性，并用  `std::filesystem::permissions()`  函数来修改文件权限。可以使用  `std::fstream`  中的  `open()`  函数来创建新的文件，如果文件已经存在，则该函数会将其打开。可以使用  `std::filesystem`  中的  `copy()`  函数来复制文件。可以使用  `std::remove()`  函数来删除文件。]]></description><category></category></item><item><title><![CDATA[C++——文件访问]]></title><link>https://blog.youkuaiyun.com/m0_48748418/article/details/130282834</link><guid>https://blog.youkuaiyun.com/m0_48748418/article/details/130282834</guid><author>m0_48748418</author><pubDate>Fri, 21 Apr 2023 10:38:39 +0800</pubDate><description><![CDATA[上述代码中，`std::filesystem::directory_iterator`  用来遍历指定路径下的所有文件和子目录，`entry.is_directory()`  判断当前遍历到的路径是否为目录，如果是，则递归调用  `ListFiles`  函数继续遍历子目录，否则使用  `entry.path().filename()`  输出文件名。]]></description><category></category></item></channel></rss>