C++
文章平均质量分 62
知行合一2018
这个作者很懒,什么都没留下…
展开
-
C++标准库算法std::upper_bound示例
C++标准库算法`std::upper_bound`使用二分查找算法在**已按升序排列**的序列中返回指向第一个大于给定值的元素的迭代器,例如:**已按升序排列**的序列为`{100.0, 101.5, 102.5, 102.5, 107.3}`,第一个大于`83.2`的元素为`100.0`,其索引值为`0`(起始序号为`0`),第一个大于`102.5`的元素为`107.3`,其索引值为`4`,大于`110.2`的值不存在。原创 2023-05-25 11:35:27 · 1084 阅读 · 0 评论 -
C++多线程:使用std::packaged_task在线程之间传递任务
另一项需要考虑的事情是:线程之间的相互通信通过什么来实现?需要用循环来不断检查吗?可以使用循环,更好地方式是通过触发一个事件来唤醒线程。的多线程版本,用于在线程之间传递任务。主线程与后台线程之间往往需要传递一些任务。例如:主线程是图形化界面显示,后台线程执行计算任务。主线程收到用户的某项长周其计算任务时,可以调用后台线程来执行,等到计算结果返回后再在图形化界面中显示,C++ 11中的。要求GCC编译器版本必须为9.1以上版本(Ubuntu 20.04 2021年以后的版本默认就是GCC 9.3)。原创 2023-02-14 11:56:14 · 460 阅读 · 0 评论 -
C++多线程:使用std::condition_variable实现多生产者-多消费者模型示例
【代码】C++多线程:多生产者-多消费者模型示例。原创 2023-02-03 20:26:37 · 288 阅读 · 0 评论 -
C++多线程:使用std::condition_variable实现生产者-消费者模型示例
【代码】C++多线程:生产者-消费者模型示例原创 2023-02-03 20:18:32 · 237 阅读 · 0 评论 -
C++ STL标准库容器真正减少空间的方法
时,如果容器占用的内存比较大,一般希望在使用完毕后,将容器占用的内存空间给清理掉。不幸地是这些函数都不能让容器占用的内存真正释放。真正可以释放内存的方法是同时调用。我们在使用C++ STL标准库的容器如。函数,还有一些人可能会使用。函数,甚至有些人会使用。2023年1月11日。原创 2023-01-11 11:18:18 · 1114 阅读 · 0 评论 -
std::enable_shared_from_this作用
这个类有什么用呢?很多文章讲得云里雾里,不知所以然。其实他的作用很简单。之类的指针)时,经常需要返回一个类对象自身的指针,也步是。朴素的想法应该类似如下示例(文件命名为。来替换原生指针,那么如何返回一个原生指针。从上述调用堆栈可看出,C++11及之后的标准推出了一个类。对象内存在在双重释放,程序崩溃。现在,我们使用智能指针。进入GDB界面后,按下。原创 2022-12-10 20:14:53 · 1081 阅读 · 0 评论 -
std::unordered_map与std::unordered_multimap示例代码
`unordered_map`是关联容器,含有带唯一键的键-值pair 。搜索、插入和元素移除拥有平均常数时间复杂度。元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。`unordered_multimap`是无序关联容器,支持多个相同键值(一个`unordered_multimap`可含有一个键值的多个副本)。...原创 2022-08-27 20:18:02 · 379 阅读 · 0 评论 -
std::partial_sum示例代码
`std::partial_sum`用于求取序列的累加值,例如:原序列为:`1, 2, 3, 4, 5`,累加后的序列为:`1, 3, 6, 10, 15`。可以使用带系数的版本,例如乘以系数`1.2`,累加后的序列为:`1, 3.6, 7.92, 14.304, 23.1648`。......原创 2022-08-27 16:42:13 · 520 阅读 · 0 评论 -
有限状态机TinyFSM使用指南
本文介绍了有限状态机TinyFSM的使用方法原创 2022-07-16 16:12:04 · 2673 阅读 · 1 评论 -
Ubuntu 20.04系统中VSCode+CMake+GTest实现C++程序自动化单元测试的详细方法
严正声明:本文系作者davidhopper原创,未经许可,不得转载。本文介绍在Ubuntu 20.04系统中,使用VSCode、CMake、GTest实现C/C++程序单元测试的详细步骤。一、安装VSCode前往https://code.visualstudio.com/下载VSCode安装包,注意下载deb包,下载完成后,使用“Ctrl+Alt+T”打开一个命令行窗口,执行如下命令安装VSCode:...原创 2021-10-07 13:36:06 · 5515 阅读 · 4 评论 -
使用动态规划实现正则表达式匹配
严正声明:本文系作者davidhopper原创,未经许可,不得转载。下述问题来源于正则表达式匹配:一、问题描述给定一个字符串 s 和一个字符串模式p,请你来实现一个支持.和 *的正则表达式匹配。.匹配任意单个字符*匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个字符串s,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z...原创 2019-12-24 12:09:10 · 2212 阅读 · 1 评论 -
多线程按序调度
严正声明:本文系作者davidhopper原创,未经许可,不得转载。下述问题来源于按序打印:一、问题描述提供一个类(原题描述以Java语言提供,本文使用C++实现)public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void th...原创 2019-12-13 16:48:03 · 473 阅读 · 0 评论 -
std::search算法原理图解
严正声明:本文系作者davidhopper原创,未经许可,不得转载。std::search算法定义于头文件<algorithm>中,不考虑C++ 17标准中提出的执行策略,也不考虑使用自定义的二元谓词(binary predicate,即接受两个参数,返回值类型为bool的函数或仿函数,形如:bool pred(const Type1 &a, const Type2 &...原创 2019-12-12 14:54:54 · 3714 阅读 · 0 评论 -
使用AStar算法求解二维迷宫问题
题目描述定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,...原创 2019-11-28 11:49:01 · 2242 阅读 · 2 评论 -
字符串简单加解密
严正声明:本文系作者davidhopper原创,未经许可,不得转载。题目描述对输入的字符串进行加解密,并输出。加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。解密方法为加密的逆过程。接口描述实现接口,每个接口实...原创 2019-11-23 15:37:48 · 1914 阅读 · 0 评论 -
处理坐标移动指令
题目描述开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10; A1A; %; YAD; 等。下面是一个简单的例子 如:A10;S20;W10...原创 2019-11-22 18:04:43 · 1200 阅读 · 0 评论 -
按照从小到大的顺序输出一个正整数的所有质数的因子
题目描述输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格。输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入180输出2 2 3 3 5答案#include <iostream>int main() ...原创 2019-11-22 14:58:13 · 2570 阅读 · 0 评论 -
数字进制转换输入输出
题目描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )输入描述输入一个十六进制的数值字符串。输出描述输出该数值的十进制字符串。示例1输入0xA输出10答案#include <iostream>int main() { int number = 0; while (std::cin >> std::h...原创 2019-11-22 14:37:29 · 250 阅读 · 0 评论 -
字符串分隔与补齐
严正声明:本文系作者davidhopper原创,未经许可,不得转载。题目描述连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入2次,每个字符串长度小于100)输出描述输出到长度为8的新字符串数组示例1输入abc123456789输出abc00000123456789...原创 2019-11-22 14:11:12 · 211 阅读 · 0 评论 -
随机整数数组去重与排序
严正声明:本文系作者davidhopper原创,未经许可,不得转载。题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测...原创 2019-11-22 12:09:33 · 728 阅读 · 0 评论 -
不区分大小写的字符个数统计
严正声明:本文系作者davidhopper原创,未经许可,不得转载。问题描述写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。输入描述第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。输出描述输出输入字符串中含有该字符的个数。示例1输入ABCDEFA输出1说明输入、输出不要添加任何多余的字符...原创 2019-11-22 10:09:44 · 784 阅读 · 0 评论 -
Ubuntu 16.04系统中GCC 9.1编译器安装方法及C++17标准测试示例
2017年底,C++17标准正式颁布,该标准的最大贡献是,提供了STL库算法的并行运算版本,对于我这种喜欢追求算法性能的程序员而言,无疑是一个极大的福音。幸运地是,Linux系统标准编译器GCC能完美地支持C++ 17标准,但需升级到7.0以上版本;不幸地是,Ubuntu 16.04版本自带的GCC版本为5.4.0,可支持C++ 14标准,但基本不支持C++ 17标准。怎么办?那就从零开始,从GC...原创 2018-03-25 10:40:08 · 47323 阅读 · 14 评论 -
C++17标准STL库并行策略在GCC编译器中的替代实现方法
C++17标准STL库并行策略在GCC编译器中的替代实现方法一、引言C++ 17标准中一个令人兴奋的特性是对STL库中的69个算法加入了执行策略(execution policies),允许在少量修改的情形下,对原有STL库算法实现并行计算,这对希望提高效率的开发者无疑是一个很大的福音。令人遗憾地是,目前主流C++编译器尚未加入对该特性的支持。 GCC编译器作为Linux系统中最主流的编...原创 2018-04-18 16:57:24 · 7306 阅读 · 0 评论 -
使用C++11实现二维坐标转换
问题请使用C++11标准实现二维坐标转换公式: 有两套笛卡尔坐标系:XOY和X'O'Y',X'O'Y'相对于XOY坐标系进行了平移(x_shift, y_shift)和旋转(angle,弧度)变换,一个点在XOY坐标系中的坐标为:(x, y),计算该点在X'O'Y'坐标系中的坐标:(x_prime, y_prime)。要求1.使用C++标准库(STL库)算法; 2.使用C++1...原创 2018-04-24 17:51:34 · 8104 阅读 · 0 评论 -
Apollo项目线程池技术浅析
Apollo项目线程池技术浅析严正声明:本文系作者davidhopper原创,未经许可,不得转载。1 线程池技术简介1.1 线程池的定义线程池是一种多线程形式,首先开启指定数量的后台工作线程,并将多个待执行任务添加到任务队列,然后将队列中的任务逐个交给空闲的工作线程执行(如下图所示)。 1.2 使用线程池的原因创建/销毁线程伴随着操作系统的资源开销,过于频繁的创...原创 2018-05-17 16:58:20 · 3218 阅读 · 0 评论 -
std::packaged_task与std::async的差别
std::packaged_task与std::async均用于创建异步任务,二者均可通过std::future对象返回执行结果,二者使用的一个主要差别是:std::packaged_task需要等待异步结果返回,而std::async不必。下面给出一个显示二者差异的示例程序:#include &amp;amp;lt;functional&amp;amp;gt;#include &amp;amp;lt;future&amp;amp;gt原创 2018-12-15 10:12:37 · 1764 阅读 · 0 评论 -
Apollo项目代码迁移到Cyber RT框架(Apollo 3.5以上版本)的方法
严正声明:本文系作者davidhopper原创,未经许可,不得转载。Apollo 3.5彻底摒弃ROS,改用自研的Cyber RT作为底层通讯与调度平台,实时性与灵活性更为突出。关于Apollo 3.5的构建方法,可参见我的一篇博客。关于Apollo 3.5各功能模块的启动过程解析,可参见我的另一篇博客。本文阐述Apollo项目代码迁移到基于Cyber RT框架(Apollo 3.5版)的...原创 2019-01-07 18:01:15 · 13975 阅读 · 11 评论 -
浅谈C++11标准中的复制省略(copy elision,也叫RVO返回值优化)
严正声明:本文系作者davidhopper原创,未经许可,不得转载。C++11以及之后的C++14、17标准均提出一项编译优化技术:复制省略(copy elision,也称复制消除),另外还有RVO(return value optimization,返回值优化)或NRVO(named return value optimization,具名返回值优化)的提法,其实都是一回事。维基百科的Copy...原创 2019-05-30 15:02:29 · 4708 阅读 · 4 评论 -
Ubuntu 16.04系统中使用GCC 9.1及Intel TBB库运行C++17 STL并行算法库
严正声明:本文系作者davidhopper原创,未经许可,不得转载。C++17标准的最引人入胜之处就是STL并行算法库。如下述代码auto_parallel.cpp所示,仅仅在原有的STL算法中添加一个处理策略参数execution::par,就可以让其具备并行计算的能力:#include <algorithm>#include <execution>#includ...原创 2019-08-05 09:03:24 · 8892 阅读 · 4 评论 -
采用C++ 11标准判断两个浮点数是否相等
在采用C++编写算法时,经常需要判断两个浮点数是否相等。由于计算精度的原因,采用“==”运算符是不可行的。下面给出采用C++11标准判断两个浮点数是否相等的代码:// Test whether two float or double numbers are equal.// ulp: units in the last place.template &lt;typename T&gt;...原创 2018-03-19 11:20:36 · 9539 阅读 · 2 评论