自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 Apollo决策规划模块pipe例子:scenario-stage-task

pipe例子:https://apollo.baidu.com/community/article/32。红绿灯同行例子:https://www.guyuehome.com/43808。

2023-08-27 22:31:35 122

原创 总结c++八股知识

解决方法是以inline的方式完成,如果函数太复杂不适合inline,就会合成一个explicit noninlinestatic实体(Static函数独立于编译单元)。原因不详。“声明”则只是声明这个符号的存在,即告诉编译器,这个符号是在其他文件中定义的,我这里先用着,你链接 的时候再到别的地方去找找看它到底是什么吧。“定义”就是把一个符号完完整整地描述出来:它是变 量还是函数,返回什么类型,需要什么参数等等。函数或变量在声明时,并没有给它实际的物理内存空间,它有时候可保证你的程序编译通过;

2023-02-05 19:32:10 574

原创 右值引用的显式定义后将退化为左值。

注意看代码里注释的报错,可以看出有左值引用将报错,等号右边确实是右值。其次,将左值赋给右值类型也会报错。类型 && 变量名 = 右值。

2022-08-16 19:13:52 361

原创 计数安全的C++共享指针实现

https://blog.csdn.net/solstice/article/details/8547547:讨论共享指针是线程不安全的例子;https://blog.csdn.net/loreal8/article/details/107617782:讨论计数线程安全。当然了,这个实现其实是很粗暴的,只是一种思想的体现,源码肯定比这复杂的多。断言assert的使用,能够确保空指针的使用。...

2022-08-15 23:20:23 386

转载 (转载)C++中的头文件

很显然,答案是不可能。但是有一个很简单地办法,可以帮助程序员们省去记住那么多函数原型的麻烦:我们可以把那几百个函数的声明语句全都先写好,放在一个文件里,等到程序员需要它们的时候,就把这些东西全部copy进他的源代码中。这 个方法固然可行,但还是太麻烦,而且还显得很笨拙。于是,头文件便可以发挥它的作用了。所谓的头文件,其实它的内容跟.cpp文件中的内容是一样的,都是 C++的源代码。但头文件不用被编译。...

2022-08-13 22:19:11 2822

转载 (转载)cin、cin.get()、cin.getline()、getline()的区别

由于cin在遇到空格/tab时,就会停止读取,所以如果我在第一次输入时,利用空格隔开两个字符串,那么cin在第一次取的时候,只会读取前一个字符串,到空格结束,此时缓冲区还保留着前面输入的第二个字符串,那么第二次cin就会直接从缓冲区取残留数据,而不会请求输入。其实该函数最常用的方式是这样的,将第一个参数设的非常大,将第二个参数设为'\n',这样就可以缓冲区中回车符中的所有残留数据,因为一般情况下前面输入残留的数据是没有用的,所以在进行新一次输入操作前将缓冲区中所有数据清空是比较合理。...

2022-07-22 14:49:39 851

原创 代码随想录刷题笔记

代码随想录对应题目链接数组是有序数组,是使用二分查找的基础条件。以后大家只要看到面试题里给出的数组是有序数组,都可以想一想是否可以使用二分法。或者说可以转换在一个有序数组中找一个数的题目。同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。代码随想录对应题目链接双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。对于使用双指针的题目,需要明确双指针的含义,针对其含义去思考题解方式。双指针法(快慢指针法)在数组和链

2022-07-12 17:33:11 493

原创 关于priority_queue大小顶堆排序问题

在做leetcode的347. Top K Frequent Elements时,用到了priority_queue这个容器适配器,这个容器默认排序是大顶堆,关于它的排序准则正如代码随想录里说的(对应题解链接):那么,我们看下priority_queue的函数模板定义:以及priority_queue的介绍:注意标黄的这句话。我们可以看见,所用的容器是vector(当然我们可以改成别的容器如list),没看源码实现,做一波合理的推测:priortity_queue只有这三种操作:top(

2022-07-09 10:09:51 560

原创 二分法时间复杂度

二分法的查找过程相当于在一颗二叉树中寻找一条从root节点到叶节点的路径,其中root节点的数值是最开始的数量总数N,其他根节点数值的是其父节点的数值的二分之一,所有叶节点的数值是1。因此,可以知道,二叉树的层数就是二分法的调用次数,调用次数就是二分法的时间复杂度,有:N/(2n) = 1;-> N = 2n;-> n = log2N;所以,时间复杂度是logN....

2022-05-05 10:30:00 4554

原创 二叉树顺序储存的父子节点索引关系

一个二叉树每一层的节点数是一个等比数列,其中,q=2;则第一层有 a1 = 1 个节点,第k层有 ak = a1* 2(k-1) = 2(k-1) 节点则,根据等比数列求和公式,一个层数为 n 的满二叉树的节点树为:2n - 1;如果采用顺序储存方式有,第k层的最后一个节点的索引值为:2k-1 - 2;第k+1层的第一个节点的索引值为:2k - 1;第k层的第一个节点的索引值为:2k-1 - 1;假设现在一个节点N位于第k层的第m个节点,即索引值为:i = 2k-1 - 1 + m ;则

2022-05-01 18:49:20 933

原创 c++static用法详解与为什么非const静态变量要在类外定义的原因分析

c++static用法详解内容来自于这篇博文,写的很不错,为方便学习static关键字的用法,我复制过来了。后面的为什么非const静态变量要在类外定义的原因分析则是自己增加的内容。static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。 最后一节加入了c++面向对象中static的使用特性,当作拓展阅...

2022-05-01 15:11:12 2326

原创 C/C++编译与链接过程详解

参考:https://blog.csdn.net/guaiguaihenguai/article/details/81160310https://blog.csdn.net/weixin_42018112/article/details/82289971

2022-04-30 17:19:15 862

转载 (转载)c++的常量折叠与const常量

一,前言 有关C++语言的const常量的考察点:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配区是很普通的栈或者全局区域。也就是说const常量只是编译器在编译的时候做检查,根本不存在什么read-only的区域。 所以说C++的const常量和常量字符串是不同的,常量字符串是存储在read-only的区域的,他们的具体的存储区域是不同的。 二,常量折叠 1,举...

2022-04-30 09:46:00 143

转载 (转载)为什么 C++ 有指针了还要引用?

今天师弟问我,引用的底层也是指针实现的,内置类型指针传递和引用传递的汇编代码是一样的,那C++为什么还需要引入引用呢? 好吧,仔细想了下,这确实是个好问题。 引用传递,只是明面上,没有使用值传递,值传递本身是不可避免的。 编译器,暗地里通过指针(或者其他可以替代指针的数据类型)的值传递,替换了引用传递。 所以引用传递,实质上是地址传递,别名这东西只是概念,是一种抽象,别名是没法传递的。 别名,可不是真实的数据类型。 因为,函数传递参数需要,数据复制,所以明的暗的值传递,不可避免。 引用的高效,在于对大的数据

2022-04-28 15:24:16 786

原创 c++:全局变量、静态变量的静态初始化与动态初始化

参考:https://www.cnblogs.com/dylan-liang/p/14407237.htmlhttps://www.cnblogs.com/fushi/p/7631359.html

2022-04-26 14:35:09 897

转载 (转载)实例说明代码段(.text)、数据段(.data)、bss段、只读数据段(.rodata)、堆栈的划分依据

目录 程序实例介绍各个段内容、分析段(segment)分布分析代码段(.text)、数据段(.data)、bss段、只读数据段(.rodata)划分依据 程序实例介绍各个段内容、分析段(segment)分布 先举个小例子说明,让大家有个表面的印象。 下面的程序定义了...

2022-04-26 14:09:32 1212

原创 默认构造函数、复制构造函数、赋值构造函数

#include <iostream>using namespace std;class Person{ public: Person(int x, int y=0, int z=0):mId(x), mAge(y), test(z){ print(); cout << "Person" << endl; } void operator = (co

2022-04-24 23:00:39 425

原创 C++ typeid(*).name()对指针的返回值与指针用法介绍

#include <iostream>#include <typeinfo>using namespace std;int main() { int*(*pp())[3]; int**(*PPP)[3]; double (*FuncPtr)(float); void(Func)(int, float); cout << typeid(pp).name() << endl; cout << type

2022-04-20 15:18:41 1436

原创 使用类的operater()当作函数对象的优点

2022-04-19 16:29:41 163

原创 C++如何获取虚函数表(vtbl)的内容及虚成员函数指针存放原理

前言因为不同的运行环境的运行结果是不同的,特别是不同的编译器对c++类对象模型的实现是很可能存在差异,所以有时不同的编译平台的代码不能兼容也是部分原因于此。本文的运行环境是:ubuntu16.04;编译器g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609一些关于指针的知识这篇文章事引用于这篇博客内容其中的虚函数表(vtbl)的内容及函数指针存放顺序,这里针对这部分进行了进一步的分析,为了方便理解本篇文章的内容,对于没基础的人,有必要看下前面这

2022-04-19 14:49:09 2089

转载 C++类对象模型之内存布局

1、C++类对象的内存布局      在C++的类对象中,有两种类的成员变量:static和非static,有三种成员函数:static、非static和virtual。那么,它们在C++的内存中是如何分布的呢?       C++程序的内存格局通常分为四个区:全局数据区(data area),代码区(code area),栈区(stack ...

2022-04-18 20:47:29 1091 1

转载 C++四种类型转换运算符:static_cast、dynamic_cast、const_cast和reinterpret_cast

http://c.biancheng.net/cpp/biancheng/view/3297.html

2022-04-17 23:07:01 67

原创 c++ 数组元素类型为指针情况下,元素地址与元素内容所指向地址的区别

看下面的例子说明以及输出。#include <iostream>using namespace std;int main() { int* a[3]; for (int i = 0; i < 3; ++i) { a[i] = new int{i}; } for (int i = 0; i < 3; ++i) { cout << "数组第" << i << "元素的地址(从栈中分

2022-04-17 18:12:55 464

转载 (转载)《C++标准库(第2版)》笔记

来自大佬的笔记,敬礼!!!https://blog.csdn.net/qq_41453285/category_9816953.html

2022-03-27 23:55:51 154

原创 c++11 bind直接绑定未初始化类的成员函数、类对象的operater()的方法与区别

针对标题的两种情况,使用起来有一定的特殊性,特此记录下。至于其他常规的bind使用方法,网上有很多文章有介绍,也可以看这篇文章。标题的两种情况看下面的例子直接学习用法即可,用法也很直观简单,不得不说,C++11的bind的真是太牛叉了!#include <iostream>#include <functional>#include <typeinfo>using namespace std;using namespace placeholders;cl

2022-03-27 16:40:22 808

原创 std::condition_variable.wait()的用法和设计缺陷带来的坑

std::condition_variable的用法具体用法参照这篇文章,这里只针对其中的一个成员函数 wait() 的用法进行讨论。成员函数wait()的用法关于wait()的用法,在这篇文章里说到:(2)、wait:当前线程调用wait()后将被阻塞,直到另外某个线程调用notify_*唤醒当前线程;当线程被阻塞时,该函数会自动调用std::mutex的unlock()释放锁,使得其它被阻塞在锁竞争上的线程得以继续执行。一旦当前线程获得通知(notify,通常是另外某个线程调用notify_*

2022-03-26 12:54:06 8835 13

转载 C++11:Default和Delete

目录   引子 默认构造函数 析构函数 默认拷贝构造函数 默认拷贝赋值运算 默认移动构造函数 默认移动赋值函数 default delete C++11之前 C++11实现 引子 default和delete是C++11新添加的关键字,依靠这两个关键字C++编译器可以控制函数的默认生成和删除,这是对C++98标准的很大升级。这儿需要说明的是default仅仅可以控制类的特殊成...

2022-03-23 15:54:11 1714

转载 C++前置++和后置++的区别

       今天在阅读《google c++ 编程风格》的文档的时候,5.10. 前置自增和自减:有一句话引起了我的注意: 对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高。于是我查了查前置++和后置++的区别。 注意:《more effe...

2022-03-21 17:15:14 3860 3

转载 C++ 值传递、指针传递、引用传递详解

而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~下文会通过例子详细说明哦值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作引用传递:形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在

2022-03-19 00:05:40 525

原创 async(), future, shared_futrue(), wait()的一个综合性例子

先贴例子,具体知识后续补充。。。#include <future>#include <thread>#include <iostream>#include <exception>#include <stdexcept>using namespace std;int& queryNumber (int& num){ // read number cout << "read number:

2022-03-18 16:33:42 139

转载 智能指针、单例、多线程三者综合应用+智能指针源码分析

查看文章:https://mp.weixin.qq.com/s/b_xlJF1-Cplgs-uawWuUow

2022-03-17 22:40:13 88

转载 (转载)DeepRoute Lab | 【C++性能】你应该拷贝(构造)吗----std::move、完美转发、push_back、push_emplace的理解与应用

查看这篇文章https://mp.weixin.qq.com/s/1pHvbwMru4Pc2iGaWgT-Pw

2022-03-17 15:24:12 90

原创 memcpy、memset用法总结

1. memcpy用法说来惭愧,虽然有经常在代码里接触到这个函数,一直以为这个函数的作用是复制内存,今天才发现,是复制内存上每个字节上的内容。具体的信息可以查看下官方文章的描述。通过下面这个例子看看情况:#include <iostream>#include <string>#include <cstring>int main (){ char* data; char* tdata; data = new char[10]; tdata =

2022-03-17 13:55:19 991

原创 利用lambda实现set的自定义排序准则的局限

自定义例子:#include #include #include #include using namespace std;int main(){auto cmp = [](const string& s1, const string& s2) {return s1[0] < s2[0];};set<string, decltype(cmp)> s(cmp);s.insert({“as”, “bs”, “AA”});for (auto&..

2022-03-06 12:57:24 278

原创 c++容器中assign()的三种用法

更详细的说明可以查看官方文档。利用的官方文档例子能够说明这三种方法的使用方式:#include <vector>#include <iostream>#include <string> int main(){ std::vector<char> characters; auto print_vector = [&](){ for (char c : characters) s..

2022-03-02 21:34:14 5468

原创 std::move与std::forward用于模板函数时,模板参数<T && a>中的参数a退化成左值的探讨

std::move与std::forward的一些知识参考文章里的说法:要认识它的作用,需要知道C++中的几条规则:(这里有篇挺好的文章:http://blog.csdn.net/zwvista/article/details/6848582,但似乎因标准的更新,其中的规则已不完全成立了)1.引用折叠规则:X& + & => X&X&& + & => X&X& + && => X&X&am

2022-02-26 18:36:30 280

原创 vscode设置clang-format

参考这两篇文章:https://blog.csdn.net/XCCCCZ/article/details/107738480https://blog.csdn.net/HandsomeHong/article/details/116725029

2022-02-14 17:11:18 303

转载 (转载)众多C++容器如何挑选?

原文地址:https://blog.csdn.net/deng821776892/article/details/105663142/ 目录 前言无规律容器vectordequelist&forward_listqueue&stack 有规律容器priority_queue有序关联容器无序关联容器array 选择方法总结 前言 相信大家在学习C++过程中都会学习STL容器,至于容器实现的原理可以去看侯捷老师《STL源码剖析》。网上也有很多资源,为了支持

2022-01-23 13:25:04 121

原创 array、vector中data()成员函数的用法

以array容器为例,根据上面图片的描述,data()返回的是首元素的地址(裸指针)。这个对vector也成立。但list和deque有序容器没有提供这个成语函数。可见,data()成员函数只有array、vector提供了。个人猜测,因为只有这两者容器的内存分布是连续的。其他容器的特点可以参考这篇文章。代码示例:#include <iostream>#include <vector>#include <array>#include <list&gt.

2022-01-23 13:19:51 1831 2

原创 解决undefined reference to symbol ‘ceil@@GLIBC_2.2.5这类问题的方法

#include <unordered_map>#include <string>#include <iostream>using namespace std;int main(){ unordered_map<string,double> coll { { "tim", 9.9 }, { "struppi", 11.77 }

2022-01-21 22:34:32 4721 1

SLAM经典入门资料与教程

本人长期收集各类SLAM资料,包含教程,论文,原理等。比如高博十四讲,各类经典slam论文(RGB-D, ORB,GMAPPING...)

2018-02-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除