自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 [Effective STL] 迭代器

尽量使用iterator代替const_iterator、reverse_iterator和const_reverse_iterator下面图片描述几种迭代器之间的关系:图中显示从iterator到const_iterator,从iterator到reverse_iterator和从reverse_iterator到const_reverse_iterator可以进行隐式转换。并且rever...

2019-06-05 00:09:10 183

原创 [Effective STL] 关联容器

理解相等(equlity)和等价(equivalence)的区别在STL中有很多这样的函数,它们需要确定两个值是否相同,但这些函数以不同的方式来判断这两个值是否相同。find对相同的定义是等价的,是以operator ==为基础,而set::insert对系统的定义是等价。因此需要了解它们之间的区别。在实际过程中,相等的概念是基于operator ==的,如果表达式x==y返回真,则x和y的值...

2019-06-04 21:46:45 179

原创 [Effective STL] Vector和String

使用reserve来避免不必要的重新分配关于STL容器,最了不起的一点是,它们是自动增长以便容纳下你放入其中的数据,只要没有超出它们的最大限制就可以。对于vector和string,增长过程是这样的:每当需要更多空间时,就调用与realloc类似的操作。1、分配一块大小为当前容量的某个倍数的新内存。在大多数实现中,vector和string的容量每次以2的倍数增长,即,每当容器需要扩张时,它...

2019-05-17 12:42:16 217

原创 [Effective STL] 容器

慎重选择容器的类型标准序列容器:vector,string,deque,list标准关联容器:set,multiset,map,multimap非标准序列容器:slist(单向链表),rope(重型string)非标准的关联容器:hash_set,hash_multiset,hash_map,hash_multimap标准的非STL容器:数组,bitset,valarray,stack,...

2019-05-17 11:15:42 174

原创 [Effective modern cpp] 右值引用、移动语义和完美转发

std::move 和 std::forwardNote: std::move 不进行任何移动,std::forward 也不进行任何转发,它们仅仅执行强制型别转换的函数。std::move无条件地将实参强制转换成右值,而std::forward则尽在某个特定条件满足时才执行同一个强制转换。在运行期,二者不会做任何操作。所有函数形参皆为左值。区分万能引用和右值引用1、如果函数模板形参具备T...

2019-05-11 21:41:53 254

原创 [Effective modern cpp]智能指针

使用std::unique_ptr管理具备专属所有权的资源1、std::unique_ptr 是只移型别。2、std::unique_ptr 默认析构通过delete实现,但可以设置自定义析构器。auto delInvmt = [](Investment* pInvestment){ makeLogEntry(pInvestment); delete pInvestment;};...

2019-05-08 17:33:53 280

原创 [Effective modern cpp]现代c++区别

读书笔记创建对象时使用()和{}的区别空指针优先选用nullptr,而非0或null创建对象时使用()和{}的区别1、大括号可以指定容器的初始内容>。std::vector<int> v{1,3,5}2、大括号可以用来为非静态成员指定默认初始化值,也可以用’='的初始化语法,不能用()。class Widget{ ...private: int x{0};/...

2019-04-27 21:15:10 807

原创 [Effective modern cpp] 并发API

笔记要点std::async与std::thread的区别std::async的启动策略使std::thread型别对象在所有返回路径皆不可联结期值析构函数行为考虑针对一次性事件通信使用以void为模板型别实参的期值条件变量配合互斥量的问题通过标志位的方式,需要不断地轮询,产生额外的资源消耗,轮询成本太高。标志位、互斥量、条件变量的方式使用std::promise型别对象和std::future型...

2019-03-03 15:13:02 230

原创 [Effective modern cpp] Lambda表达式

读书笔记避免使用默认捕获模式按引用捕获会导致空悬行为,如果使用,请保证引用变量的生命周期与lambda的生命周期一致。按值捕获要注意如果捕获到指针(类的this指针)也会导致空悬行为, 捕获只能在创建lambda式的作用域内可见的非静态局部变量(包括形参)。使用默认值捕获模式,不是自洽的。静态存储期对象可以在lambda内使用,但是他们不能被捕获,但如果使用了默认值捕获模式,这些对象就会给人以错觉...

2019-02-24 22:27:21 326

原创 [Effective modern cpp] auto关键字

优先使用auto而非类型全程

2019-02-23 20:56:22 189

原创 [Effective modern cpp] 第一章 类型推导

笔记要点模板类型推导(1)类型推导Param包含普通的引用或指针的情况(2)类型推导Param为万能引用的情况(3)类型推导Param为既不是引用也不是指针的情况corn case(指向const内容的const指针)corn case (数组退化、函数退化)auto类型推导decltype的理解模板类型推导模板的定义: template <typename T> func(P...

2019-02-23 16:38:30 267

原创 视觉SLAM十四讲(第三章作业)

群的性质1. {Z; +} 是否为群?若是,验证其满足群定义;若不是,说明理由。答:2. {N; +} 是否为群?若是,验证其满足群定义;若不是,说明理由。答:同理如上,也是阿贝尔群。验证向量叉乘的李代数性质推导 SE(3) 的指数映射伴随轨迹的描述熟悉C++11...

2018-10-12 12:52:58 2244 4

原创 视觉SLAM十四讲(第二章作业)

熟悉Eigen矩阵运算设线性⽅程 Ax = b,在 A 为⽅阵的前提下,请回答以下问题1、在什么条件下, x 有解且唯⼀?答:A是方阵,且可逆。2、⾼斯消元法的原理是什么?答:高斯消元法简介3、QR分解的原理答:QR分解介绍 注意:这里被分解矩阵A不一定是方阵,也可以是非方阵。Q为正交矩阵,R为上三角矩阵。4、 Cholesky 分解的原理是什么?答:Cholesky 注意:这里...

2018-10-10 17:12:59 3249 2

原创 视觉SLAM十四讲(第一章作业)

熟悉Linux1、如何在 Ubuntu 中安装软件(命令⾏界⾯)?它们通常被安装在什么地⽅?答:第一个问题有两种安装方式(1)apt-get install (2)dpkg,详情如下所示1.1 apt-get install安装方式1.1.1 sudo apt-get install普通安装1.1.2 sudo apt-get -f install修复安装1.1.3 sudo apt-...

2018-10-01 15:50:10 5772 2

原创 剑指offer思路回顾 链表中倒数第K个 leetcode 19

题目描述 输入一个链表,输出该链表中倒数第k个结点。要求 只进行一次遍历思路 用双指针的思路,第一个指针用来遍历链表,第二个指针是从第一个指针倒数第K个节点。因此首先从第一个指针开始遍历,遍历到第k-1个节点时(这里考虑特殊情况,链表指针长度不够的情况返回nullptr),则第二个指针从头节点开始遍历,当第一指针到达尾节点时,第二个指针也到达倒数第K个节点。代码/*stru...

2018-09-12 00:09:39 220

原创 C++ 限定符Const要点

基本概念 一旦一个变量用const去修饰,那么这个变量的值在接下来的程序运行过程中就不能改变。如:const int buffersize = 512;//const 整形常量初始化buffersize = 256;//错误,因为buffersize已经定义为整型常量无法修改以下是相关const用法一些小细节。 const常量初始化int i = 42;const int ci...

2018-09-06 10:37:55 137

原创 剑指offer思路回顾 调整数组顺序使奇数位于数组前半部分

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路 双指针的思路去做这道题,由于要保证奇数和奇数,偶数和偶数之间的相对位置不变(从排序角度讲叫做保证稳定排序),因此先用指针I找到第一个偶数,然后用指针J在第一个偶数之后的区间找寻第一个奇数的位置,紧接着对这段数...

2018-09-02 00:19:36 194

原创 剑指offer思路回顾 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路 O(N)的解法是用循环每次乘以base,比较简单 O(logN)的解法是采用二分法的思想,即a^b = a^(b/2) * a^(b/2),…… a^(b/2) = a^(b/4) * a^(b/4),……a^2 = a* a以此类推,这里注意当exponent...

2018-09-01 23:22:15 105

原创 剑指offer思路回顾 旋转数组的最小数字

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路 这题有点意思,常规从头开始进行遍历的算法复杂度是O(n),肯定达不到面试官的要求,因此我们要充分利用...

2018-08-30 21:06:18 126

原创 剑指offer思路回顾 重建二叉树(leetcode 前序、中序或中序、后序)

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路 首先由前序遍历序列我们可以找出跟节点 接着我们在中序遍历序列找寻跟节点的位置,跟节点左半部分的节点构成左子树,而右半部分的节点构成右子树。...

2018-08-30 20:14:08 531

原创 剑指offer思路回顾 字符串替换空格

题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路1 O(n2)的方法也就是直观的方法就是遍历整个字符串,每找到一个空格,先将空格后的字符信息后移两哥位置,然后进行相关的字符替换。这个方法很戳思路2 O(n)的方法,先遍历字符串,找出总的空格数目,计算出替换空格...

2018-08-30 19:38:03 140

空空如也

空空如也

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

TA关注的人

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