C/C++
奔跑吧猴哥
搬砖的。
展开
-
Ubuntu20.04配置(五)安装ROS2最新版本Foxy
原文:在Ubuntu 20.04中安装ROS2最新版本Foxy Fitzroy_大橙员-CSDN博客_ubuntu20.04安装ros2ROS2 是新一代机器人操作系统。2020年6月5日,ROS2 的最新版本 Foxy Fitzroy 正式发布了, 支持到2023年的3月!ROS2 支持的平台Linux (Ubuntu Focal(20.04))macOSWindowsROS2 真正是跨平台了,ROS1 只支持 Linux。有大神说,不要搞 ROS1 了,直接上 ROS2 ~~安原创 2022-02-13 19:26:21 · 5048 阅读 · 0 评论 -
Ubuntu20.04配置(五)编译安装protobuf
原文:编译安装protobuf 详细步骤 Ubuntu - 简书需要工具:autoconf, automake, libtool, make, g++, unzip安装命令:sudo apt-get install autoconf automake libtool make g++ unzip安装步骤:下载源码 发布版地址 以c++为例,下载最新的发布版 protobuf-cpp-3.14.0.zipwget https://github.com/protocolbuffers/pro原创 2022-02-13 18:34:53 · 8603 阅读 · 0 评论 -
自动驾驶开发入门(五)---浅谈Apollo Cyber RT的数据处理层
浅淡Apollo Cyber RT之数据缓存与融合Cyber RT的层次图如下:今天要讲的内容位于上图中的中间层。一、基于Cyber RT的开发流程在开发基于Cyber RT的模块时,并不是从main()函数开始的,常规的流程是这样的:以PlanningComponent为例● 从Component派生一个子类PlanningComponent。● 重新实现虚函数Proc()和Init()。Init(),组件初始化函数,当进程初始化时,被CyberRT框架调用,我们在原创 2021-10-25 15:24:08 · 2212 阅读 · 1 评论 -
自动驾驶开发入门(三)---浅谈Apollo Cyber RT中的Transport
Cyber的Transport为上层封装了底层数据传输的细节。上层主要使用Transport,Transmitter,Receiver三个类,其中Transport是工厂类,负责创建Transmitter、Receiver以及Dispatcher(上层不直接使用)。Transmitter和Receiver各有三个派生类,对应Cyber的三种数据传输方式 ,分别是进程内(Intra)、进程间(Shm)以及网络(RTPS)。每种消息(Channel或Topic)可以dag文件中配置数据传输方式(Optional原创 2021-09-16 14:13:21 · 5925 阅读 · 4 评论 -
自动驾驶开发入门(二)---浅谈Apollo Cyber RT中的协程
以下这些是个人对于协程的总结。先说一下协程的优点:●协程的最大的优势:协程切换开销远小于线程,进程切换。相比于线程,协程没有内核态的上下文切换,近乎可以无限并发。协程在用户态进程显式的调度,可以把异步操作转换为同步操作,也意味着不需要加锁,避免了加锁过程中不必要的开销。Golang为什么有这么强的并发能力,协程居功至伟。协程创建于用户空间,理论上可以创建的协程数量远大于线程。●引入协程库后,代码以顺序性书写,易于理解,而执行时则是异步调用,性能不减。使用协程需要注意的地方:●使...原创 2021-09-16 10:37:00 · 2173 阅读 · 0 评论 -
Linux下用VS Code调试makefile工程
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ build active file", "command": "make", "args": [ ], "options": { "cwd": "${fileDirname}" ...原创 2021-04-13 14:33:49 · 644 阅读 · 0 评论 -
面向对象的目标
Booch说过:我认为面向对象的目标从来都不是复用。相反,对我来说,对象提供了一种处理复杂问题的方式。在面向对象兴起之前,编程以过程为中心,例如结构化设计方法。然而,系统复杂性已经超越了其处理能力,但我们能通过提升抽象级别来构建更大的、更复杂的系统。这才是面向对象的真正胜利!---《Thinking in UML》当然,复用的好处也是很大的,我们权当它是面向对象带来的福利好了!原创 2010-01-10 13:35:00 · 806 阅读 · 0 评论 -
C++new失败的处理
<br />我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码:<br /> int* p = new int[SIZE];<br /> if ( p == 0 ) // 检查 p 是否空指针<br /> retu转载 2011-04-19 09:47:00 · 1696 阅读 · 0 评论 -
两个已排序链表的合并
<br /> 1 typedef struct Node{<br /> 2 int data;<br /> 3 struct Node* next;<br /> 4 }Node, *LinkList;<br /> 5 void Merge(LinkList la, LinkList lb, LinkList &lc)<br /> 6 {<br /> 7 // NULL检测<br /> 8 if(!la) {lc = pb; return;}<b原创 2011-05-05 19:46:00 · 695 阅读 · 0 评论 -
基于Qt/QML的微博客户端
我用Qt/QML开发了一个微博客户端,用到Qt C++/QML/Javascript目前实现了一些基本功能,可以访问新浪微博。目前测试过的平台包括诺基亚塞班3系列手机、Windows以及Linux!由于太多的朋友发邮件找我要源码,我不能一一回复,带来不便,请见谅。所以将源码上传到CSDN方便大家下载。 源码下载1 CSDN源原创 2011-04-11 14:04:00 · 2123 阅读 · 1 评论 -
算法分析与设计之五大常用算法
http://c.chinaitlab.com/special/algorithm/Index.html转载 2011-05-10 16:44:00 · 895 阅读 · 0 评论 -
贪心算法的详解
一、 贪心策略的定义【定义1】 贪心策略是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。 其实,从"贪心策略"一词我们便可以看出,贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或较优解。 二、贪心算法的特点 通过上文的介绍,可能有人会问:贪心算法有什么样的特点呢?我认为,适用于贪心算法解决的问题应具有以下2个特点:1、贪心选择性质:原创 2011-05-11 13:37:00 · 2549 阅读 · 0 评论 -
Visual C++ 中的命名返回值优化
多年来,Microsoft Visual C++编译器一直在努力寻求更新的技术与优化方式,以求最大可能地提高程序的性能。此文描述了Visual C++编译器在不同情况下,是怎样消除多余的复制构造函数和析构函数的。 通常来说,当方法返回对象的一个实例时,会创建一个临时对象,并原创 2011-07-07 16:50:19 · 886 阅读 · 0 评论 -
C++构造函数中抛出的异常
<br />构造函数中抛出的异常<br /><br /> 1、标准C++中定义构造函数是一个对象构建自己,分配所需资源的地方,一旦构造函数执行完毕,则表明这个对象已经诞生了,有自己的行为和内部的运行状态,之后还有对象的消亡过程(析构函数的执行)。可谁能保证对象的构造过程一定能成功呢?说不定系统当前的某个资源不够,导致对象不能完全构建好自己(人都有畸形儿,更何况别的呢?朋友们!是吧!),因此通过什么方法来表明对象的构造失败了呢?C++程序员朋友们知道,C++中的构造函数是没有返回值的,所以不转载 2011-04-19 10:03:00 · 22365 阅读 · 2 评论 -
Strassen矩阵乘法
矩阵乘法的介绍以及更多的算法可以参考:WIKI矩阵乘法是线性代数中最常见的运算之一,它在数值计算中有广泛的应用。若A和B是2个n×n的矩阵,则它们的乘积C=AB同样是一个n×n的矩阵。A和B的乘积矩阵C中的元素C[i,j]定义为: 若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素C[i,j],需要做n个乘法和n-1次加法。因此,求出矩阵C的n2个转载 2011-06-06 16:54:00 · 910 阅读 · 0 评论 -
C++的栈的生长方向和函数调用方式
<br />#include<stdio.h><br />#include"stdlib.h"<br />#include<iostream><br />using namespace std;<br />//58<br />void __cdecl func3(int i, char *szTest)<br />{<br />cout << "szTest的地址:" << &szTest << endl;<br />cout << "sz本身的值:" << (void*)szTes转载 2011-06-01 09:29:00 · 1159 阅读 · 0 评论 -
C++为什么不用delete代替delete[]?
C++为什么不用delete代替delete[]?总结:一直想不通c++为什么多此一举,呵呵,前几天给Bjarne Stroustrup大师写了一份信,第二天就收到回复了,自己再仔细琢磨了一下,终于好像弄明白了:-)我的理解是这样的,无论new还是new[ ],C++的确知道返回的这个指针它指向多大的内存块,否则它就不可能正确地释放掉这块内存了。但是delete需要知道的不仅仅是指针指向多大的内存,而更重要的是要知道指针指向的数组中有多少个对象,知道了对象数量才能依次一一调用它们的析构函数。转载 2011-04-12 14:57:00 · 2288 阅读 · 0 评论 -
简单问题(2)---数据类型转换的潜规则
接上篇 http://blog.csdn.net/deyili/archive/2011/04/11/6315327.aspxtype 是个 unsigned int, 根据数据类型提升规则(参见《C++ Primer》), type - ETypeOne 的结果也是个 unsigned int,也就是说恒大于0,同理type - ETypeNine。于是这两个比较就失去了意义。原创 2011-04-11 13:40:00 · 676 阅读 · 0 评论 -
动态规划——数组最大子数组和
<br />问题描述:<br />给定一个整数数组a[0~n],求数组a的子数组,使其元素和为最大。<br />问题分析:<br />方法一:可以用普通的方法枚举所有的子数组,然后求出最大的子数组和,时间复杂度为O(n*n)。<br />方法二:问题描述符合动态规划最优子结构的要求。<br />设b[i]表示以a[i]结尾的子数组的最大子段和,即:<br />b[i]=max{sum(a[j~k])},其中0<=j<=i,j<=k<=i。<br />因此对于数组a[0~n]的最大字段和为max{b[i]原创 2011-06-01 19:11:00 · 3653 阅读 · 0 评论 -
可重入函数与不可重入函数
主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入转载 2011-06-01 19:55:00 · 587 阅读 · 0 评论 -
简单问题(1)---数据类型转换的潜规则
最近做代码覆盖率检查时发现一个问题,请看以下代码,你能看出来吗?enum{ ETypeUnknow = 0, ETypeA, ETypeB, //...... ETypeZ, ETypeOne, ETypeTwo, ETypeThree, ETypeFour, ETypeFive, ETypeSix, ETypeSeven, ETypeEight, ETypeNine,};bool IsDigitType(unsigned int typ原创 2011-04-11 13:30:00 · 974 阅读 · 0 评论 -
Qt Creator系列教程
Qt Creator系列教程转载 2011-09-02 14:39:04 · 1161 阅读 · 1 评论 -
错误码、异常和断言
1. 为什么要用异常代替错误码?错误码的缺点:1) 默认是可以忽略的,因为调用函数时可以不处理其返回值,从而错误处理要依赖于程序员的主动性,而不是程序机制的要求; 2) 不能跨作用域传送,必须逐层向上转发,即使中间没有对错误码进行重新定义; 使用异常可以解转载 2011-09-05 16:58:17 · 1146 阅读 · 0 评论 -
单元测试代码覆盖率浅谈
在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。首先转载 2011-08-15 15:02:18 · 23656 阅读 · 0 评论 -
移植Qt5.5.1和QtCreator3.5.1到 Linux + ARM
移植Qt5.5.1和QtCreator3.5.1到 Linux + ARM原创 2015-11-16 17:22:54 · 9281 阅读 · 3 评论 -
Jetson TK1开发环境搭建(五)编译Qt 5.5.1 Qt Creator3.6.0
因为QT Creator的安装依赖于QT库,务必确保QT5.5.1已经安装完成。 1. 下载Creator3.6.0资源文件: qt-creator-opensource-src-3.6.0.tar.gz 可在以下网址获取:http://download.qt.io/official_releases/qtcreator/3.6/3.6.0/qt-creator-ope原创 2016-03-30 10:39:20 · 4442 阅读 · 1 评论 -
Jetson TK1开发环境搭建(四)编译Qt 5.5.1
注:以下内容为Zhao Shuai 更新整理为什么要编译QT?通过atp-get install 可安装 5.2.1,如果没有更高Qt版本的需求,这一步操作以及下一步操作可以跳过。如果需要更高版本的QT,而QT官方没有提供ARM版本,所以只能自己编译。本教程是整理的QT5.5.1的编译安装过程。 1.下载QT5.5.1资源文件: qt-everywhere-op原创 2016-03-30 10:33:39 · 7701 阅读 · 7 评论 -
Jetson TK1开发环境搭建(三)安装 OpenCV2.4.10
注:以下内容为Zhao Shuai 整理。 因为OpenCV的安装依赖CUDA Toolkit,所以务必,不要颠倒CUDA和OpenCV的安装顺序。 1.安装“universe”在终端分别执行命令: sudo apt-add-repository universesudo apt-get update 2. 下载资源文件: libopencv4原创 2016-03-30 10:31:22 · 5903 阅读 · 1 评论 -
Jetson TK1开发环境搭建(二)安装CUDA6.5
注:以下内容为Zhao Shuai 整理。因为我们前面刷机安装的系统是L4T 21.x的,所以下面CUDA的安装使用L4T 21.x的安装教程。进入到刷机后的TK1,用户名,密码,都是ubuntu。 1. 下载资源文件: cuda-repo-l4t-r21.2-6-5-prod_6.5-34_armhf.deb 可在以下网址获取:http://developer.原创 2016-03-30 10:28:52 · 7421 阅读 · 2 评论 -
Jetson TK1开发环境搭建(一)刷机
注:以下内容为Zhao Shuai 整理。刷机前准备1. Jetson TK1开发板。 2. 安装有ubuntu系统的PC(或者ubuntu虚拟机)切记:不管是PC还是虚拟机,务必确保有大于5G的存储空间,之后安装过程会作详细解释。 3. 购买开发板时附赠的恢复线(其实就是大部分安卓手机的数据线)。 4. 刷机驱动:Tegra124_Linux_R2原创 2016-03-30 10:24:39 · 13981 阅读 · 11 评论 -
关于字节对齐的总结
1、使用默认的字节对齐方式。 规则1:各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。注: 下面列出常用类型的对齐方式(vc6.0, 32位系统)。 类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) Char 偏移量必须为sizeof(char)即1的倍数 int 偏移量必须为sizeof(int)即4的倍转载 2013-12-02 14:26:04 · 873 阅读 · 0 评论 -
C++中“引用”的底层实现
C++中“引用”的底层实现 【声明】本文无技术含量!在博客园上回复某个帖子,招来他的非议,我不想去细究这个人的治学态度,不想去问去管他到底有没有修改过自己的文章,对我来说没必要。我只能说不负责任,态度自大的,不严谨的人是令我失望的。但是对于一个问题,这里涉及到了“引用”,这是C++引入的一种新的形式,可以说是给程序员的一个语法上的好处,但是我翻看了BS的《The C++ Prog转载 2013-09-16 15:46:00 · 1384 阅读 · 0 评论 -
C语言中的字节对齐三条原则
C语言中的字节对齐三条原则转载 2013-09-02 17:27:17 · 1120 阅读 · 0 评论 -
When to use assert() and when to use try catch?
Try... catch - for exceptional conditions, i.e. conditions which aren't caused by malformed code, but which may just alter the normal control flow by external unpredictable events.Assertions for原创 2013-08-27 15:47:18 · 1587 阅读 · 1 评论 -
Changes to the Meta-Object System in Qt 5
There are changes to the meta object-system in Qt 5, both under the hood and on the API side. Some of the changes are source incompatiblewith Qt 4. In this blog I’ll describe those changes and how t转载 2012-07-19 10:32:21 · 1510 阅读 · 0 评论 -
Linux内核学习之list_entry --- 用C语言实现泛型编程
list_entry()宏#define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))ptr是指向list_head类型链表的指针,type为一个结构,而member为结构type中的一个域,类型为list_head,这个宏返回原创 2011-12-08 23:37:00 · 3742 阅读 · 0 评论 -
何时需要使用断言
1.可以在预计正常情况下程序不会到达的地方放置断言:ASSERT( FALSE );2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)3.使用断言测试方法执行的前置条件和后置条件4.转载 2011-08-15 11:53:41 · 2226 阅读 · 0 评论 -
二进制兼容性
<br />陈硕 (giantchen_AT_gmail) <br />Blog.csdn.net/Solstice<br />本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。<br />C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主要是 shared library,即动态链接库)的 ABI (applicat转载 2011-05-24 16:08:00 · 5317 阅读 · 1 评论 -
PySide入门
什么是PySide?Python通过PySide调用Qt库,开发Qt程序!以前用PyQt4,这东西配置太麻烦了,还收费,真是不爽。看一看用PySide写Qt程序有多简单:import sysfrom PySide.QtCore import *from PySide.QtGui import * # Create a Qt applicationapp = QApplication(sys.argv)# Create a Label and show itlabel = Q原创 2011-04-08 13:22:00 · 7160 阅读 · 9 评论 -
用归纳法证明循环不变式的正确性。
<br />循环不变式(loop invariant)原创 2011-05-17 13:51:00 · 1030 阅读 · 0 评论