
c++
文章平均质量分 60
风海流
Robotics Institute, Carnegie Mellon University
huyaoyu.com
展开
-
C++ lambda expression
示例来自于<< C++ Lambda Story >> by Bartłomiej Filipek, 主要集中讨论C++11, C++14和17乃至20没有仔细看.[x](int a, int b) mutable noexcept -> bool { ++x; return a < b; }mutable和noexcept的次序不能颠倒. mutable表示x可以修改.可以将lambda作为std::function的初始化connst std::functi原创 2022-01-09 05:02:27 · 464 阅读 · 0 评论 -
右键打开 visual studio developer command prompt
起因最近呐,需要在Windows上对Unreal和AirSim进行开发,感觉少了Linux上的“Open terminal here”有点不舒服,于是Google了一下加了个右键菜单,主要参考这里的教程。经过就是改注册表,Win键 + R 呼出运行窗口,regedit进入注册表编辑器(常规操作)。然后备份注册表,也就是File->Export。然后找到如下图所示的位置,添加一个新的Key,名为Developer cmd 2019Developer cmd 2019的内容包括一个(Defaul原创 2021-04-26 05:27:32 · 2890 阅读 · 1 评论 -
CppWeekly 09 regex ( string_view )
这个系列是从这篇博客开始的,主要是复现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。062 regex and string_viewJason 简单介绍了regex的用法,并且明确提示说std::sub_match的std()方法会创建一个std::string对象,对于短string,问题是不大的,但是对于长string,可能出现性能问题。于是在测试正常的regex用法之后,我试图配合regex和std::string_view一起使用。一开始是原创 2021-01-18 16:27:16 · 590 阅读 · 0 评论 -
CppWeekly 08 constexpr
这个系列是从这篇博客开始的,主要是复现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。041 constexprJason 在这期和后面几期讨论了constexpr的一些用法,非常有意思。把部分简单的运算从运行时移动到了编译时,可以提高运行效率。但是我还没有真正找到必须要这样做的的实际样例,主要是我写的代码,瓶颈都不在这种地方(瓶颈多了去了, 呵呵)。C++17 中constexpr可以使用std::array和lambda函数了。这里搬运Jason原创 2021-01-17 12:32:00 · 255 阅读 · 0 评论 -
CppWeekly 07 aggreate initialization, variable attributes
这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。025 aggregate initialization必须要C++17或之后。基本思想是初始化派生类,但是行为和structured binding好像,就是当出现私有成员时,就不行了。使用类型不正确的初始值也是不行的,但是可以忽略定义次序上排在后面的公有成员变量。即使忽略私有成员,也无法初始化。class A {public: int a = 0;原创 2021-01-11 04:27:25 · 287 阅读 · 2 评论 -
CppWeekly 06 structured binding
这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。024 Structured bindingsJason在这期里简单介绍了structured binding在C++17中的运用,挺有意思。其实我在想,要是structured binding可以忽略一些变量就好了,就像是Python里的下划线“_”的作用。目前可以通过std::tie和std::ignore来实现类似的功能,但是要预先定义变量。Structure原创 2021-01-11 03:50:46 · 467 阅读 · 0 评论 -
CppWeekly 05 nested namespace and std::clamp
这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。022 Nested namespaces这个是C++17的新特性,可以创建嵌套的namespace时将他们连写在一起,有时候很方便。namespace orgnization { namespace component { namespace subclass { struct A { }原创 2021-01-10 06:07:17 · 565 阅读 · 0 评论 -
CppWeekly 04 if constexpr, if initialization
这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。018 if constexprif constexpr可以帮助我们让函数的返回值的类型可变。在函数模板,type tratis和auto的通力合作下。见代码。其中TypeName.hpp请见于代码所在的Github repo。#include <iostream>#include <limits>#include <type_tr原创 2021-01-09 12:46:40 · 286 阅读 · 0 评论 -
CppWeekly 03 Lambda expression and std::function
这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。015-016 Using lambda expression instead of std::bind在第15期,Jason首先介绍了std::bind的用途,之后在第16期,他推荐尽量不要使用std::bind,并且貌似std::bind和boost::bind不兼容。Jason推荐使用lambda函数实现类似于std::bind的功能。于此同时,我一直对std:原创 2021-01-06 15:56:50 · 177 阅读 · 0 评论 -
CppWeekly 02,Fabonacci, exchange
这个系列是从这篇博客开始的,主要是浮现Jason Turner的“C++ Weekly With Jason Turner”视频中的代码。013 Fabonacci这个例子挺有意思,首先展示了Fabonacci数列如果用普通的递归方式设计,函数的调用次数将会成级数增加。同时Fabonacci数列的数值增加是很快的,几十个以后数据的范围就超出了int类型能够表达的范围了。Fabonacci数列参考这里。#include <iostream>static int fib( int i )原创 2021-01-06 12:58:48 · 234 阅读 · 0 评论 -
CppWeekly 01, future, vairadic expansion, std::any
最近发现一个视频列表,名为“C++ Weekly With Jason Turner”。其中每个视频都不长,是一个大佬每周做一次在线教程,围绕C++的一些细节特性进行现场编程,空闲时间看看解解闷挺好的,还能学到不少技巧。我试着复现一些教程中用到的实例,打算看到哪做到哪吧。下文中和以后的文章中所有代码都将出现在我的这个repo。每个教程都会有一个文件夹,内有源文件和一个Build.sh脚本,该脚本用于简单地编译源文件。090 FutureJason在这次教程中使用的是随机数生成作为一个task对待,我嫌原创 2021-01-04 13:12:13 · 328 阅读 · 0 评论 -
C++活到老学到老 auto
起因2020年了,C++20似乎已经正式发布了,主流编译器应该都支持了吧。从C++11开始,每三年都会正式发布一版更新的标准,并伴随着各种新特性和标准库。变化太快有时候跟不上,是时候再回顾一下C++了,这东西活到老学到老啊。这篇博文是受这个mediu文章启发,自己测试并总结出来的。主要对auto关键字和相似的类型推断行为进行了探索。经过测试系统Ubuntu 20.04, g++ 9.3.0。定义变量时的类型推断相信自从C++11之后,大家都获得了这个利器,auto。我们可以写auto a =原创 2020-12-21 05:54:19 · 681 阅读 · 1 评论 -
最近使用的一些用于点云和面网格处理的 CGAL 功能
一篇前后零散写了20几天的博文,希望大家品评。主要是总结最近使用CGAL的一些心得,集中在点云和面网格(surface mesh)的处理。我同时提供了sample代码和数据(Google drive或百度云, 密码uo59)。包含的内容有PLY格式点云读写,处理PLY文件中的property。PLY格式面网格读写。面网格property map和面法向量。网格检查和修复。Advancing front surface reconstruction.Isotropic remeshing.面网原创 2020-11-01 01:08:37 · 1465 阅读 · 7 评论 -
A Tour of C++笔记
2 User-Defined Types构造函数的Member initializer list 可以用花括号代替圆括号。enum class:enum class Color { red, blue, green }; enum class Traffic_light { green, yellow, red }; Color color = Color::red;Color redColor = Traffic_light::red; // Error;int i = Color::red原创 2020-07-19 05:16:40 · 2448 阅读 · 0 评论 -
C++11 C++14 C++17 move semantics
最近刚刚学习了一下从C++11开始支持的move semantics,C++还是很神奇的。下面代码测试了如下想法swap 两个plain array。swap 两个array of objects。从函数返回std::vector。对std::vector进行直接赋值。从函数返回对象。对对象赋值。本机系统 gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0。编译debug版本,没有显式开启编译优化。通过测试得到如下现象:通过单步调试,发现在swap两个原创 2020-05-25 10:50:09 · 413 阅读 · 0 评论 -
C++ Core Guideline 笔记03
F: FunctionsF.1 “Package” meaningful operations as carefully named functions这段很令人期待,但是看过以后感觉什么都没说。如何算作“meaningful operations”什么样算是“carefully named”。在实际操作过程中,经常遇到一个函数的长度超出一个显示器范围的情况,一般我认为这时可能会需要将这个函数破解为多个小段,然后每个小段负责执行一部分功能。但是这么做并不能产生能够重用的代码,而且有时候需要将参数不断的原创 2020-05-24 13:13:59 · 431 阅读 · 0 评论 -
C++ Core Guideline 笔记02
I.1 Make interface explicit不好的示例->int round(double d){ return (round_up) ? ceil(d) : d; // don't: "invisible" dependency}这个例子我主要理解是这样的,函数名是round但是控制逻辑中有在调用时非常可能被忽略的全局变量round_up。我理解round_up应该出现在参数列表里。但是这种设计非常有可能出现在类的成员函数里,设想如下代码片段(非原文)class原创 2020-05-24 13:13:32 · 502 阅读 · 0 评论 -
C++ Core Guidelines 笔记01
CppCoreGuidelines由C++原作者发起的一个modern C++ guidelilne. 在这里,配套的github页面在这里。CppCoreGuidelines 配套一组 Guideline Support Library,源码位于这里。我只记录了对自己有启发的内容。笔记中的大部分代码片段是复制于原文,我自己增加的代码片段会标注清楚。P.1 Express ideas directly in code.class Date {public: Month month() c原创 2020-05-24 13:13:03 · 1743 阅读 · 0 评论 -
C++ book list
转自SOhttps://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282#388282转载 2020-03-22 02:59:44 · 708 阅读 · 0 评论 -
boost disjoint set 实例
前言最近,需要用C++实现一个简单的disjoint set,查了一下STL,貌似没有已经做好的库,但是boost有。于是我决定测试一下。测试系统是Ubuntu 18.04 LTS,gcc 7.5.0,boost 1.65.01。Boost 的disjoint set documentation在https://www.boost.org/doc/libs/1_72_0/libs/disj...原创 2020-03-21 01:39:23 · 850 阅读 · 0 评论 -
PCL NormalEstimation 源码结构
前言最近需要借鉴PCL的设计写一个处理点云的程序,主要参考了其中NormalEstimation部分的源码。这里总结一下该部分源码的结构。当前参考的PCL版本是 1.10.0。NormalEstimationNormalEstimation类的继承关系如下NormalEstimation->Feature->PCLBase这三个类的定义位于源码根目录下的common/i...原创 2020-03-19 09:14:43 · 1341 阅读 · 0 评论 -
C++ tips: std::stringstream 对象的复用
用了好久居然不知道这个问题,或者是我知道,但是好久了忘记了。std::stringstream对象在重用是,必须将对象的内容清空,并且调用clear()方法。这里需要注意的是,clear()方法不能清空stringstream对象的内容!基本示例如下:std::stringstream ss;// 使用ss做一些工作// 准备重用ssss.clear();s原创 2015-06-07 19:20:21 · 1089 阅读 · 0 评论 -
C++ tips: throw和throw+对象的差别
今天搞代码,遇到一个关于C++中异常的re-throw问题。简单说就是猜catch块中不能/不想对捕捉到的异常做处理,将其再次throw时,应该如何操作。这里google了一下,参考了一下接个网址的描述http://stackoverflow.com/questions/2274661/throwing-non-const-temporaries-by-referencehtt转载 2015-06-07 19:16:55 · 1250 阅读 · 0 评论 -
C++ goto 在g++ 编译时出现 crosses initialization 和 jump to label xxx [-fpermissive] 错误
自从学习了C++语法以后,就知道有goto这个功能,但是前辈都说不要使用。今天在处理一个exception时,发现这个goto还是很有用的,因为当时的代码结构很清晰:若遇到exception 就goto到指定的函数尾端,清理掉已经申请的系统资源,打印错误消息,再返回错误代码。头一次实际使用这个goto,就遇到了问题。编译器是mpic++(其实g++,应该也会这样),具体情况是编译器包g原创 2015-06-02 12:04:17 · 7504 阅读 · 2 评论 -
CFindFile找不到最后一个文件
http://topic.youkuaiyun.com/t/20020628/13/836051.html 4楼正解! 搞死我了转载 2012-10-08 23:20:55 · 411 阅读 · 0 评论 -
fstream 对象多次使用时注意clear
C++今天程序中出现怪异情况,一个ifstream对象使用完毕之后重新open另外一个文件,确怎么也open不了。最后发现,是在上一次使用时,该对象所访问的文件已经到达文件结尾,内部的标志也被置位了。这样再次open文件时就会直接返回错误。所以每次重新使用相同的fstream对象时,应该clear一下。原创 2012-10-09 11:28:04 · 1287 阅读 · 0 评论 -
神奇的c++等号重载
今天看Effective C++ 说道等号重载的事,心里一直有疑惑,这些运算符重载都是怎么实现的。在学C++的时候只是草草的看过这部分内容,没有真正自己使用过,对于等号如何操作私有成员一直有疑问,今天试了一下,哎,还真对得起咱这张脸。。。#include class A{public: A(void) : mVal(0) { } A(int v) : m原创 2012-07-21 22:19:30 · 5928 阅读 · 0 评论 -
C++ fstream 调整读取位置到文件头
使用fstream类提供的标准接口seekg(0,std::ios::beg)表示从文件begin位置开始,偏移0个字符。如果在文件已经读取到结尾时,fstream的对象会将内部的eof state置位,这时使用seekg()函数不能将该状态去除,需要使用clear()方法。主要参考:marginal的回帖http://topic.youkuaiyun.com/t/20原创 2012-07-17 21:13:28 · 5983 阅读 · 0 评论 -
C++ tips: 类成员函数的参数默认值
对于一个类的成员函数的参数默认值,还是有一定讲究的。转载一篇文章,地址如下:http://en.cppreference.com/w/cpp/language/default_arguments关键注意几点(1)类的成员函数的默认值在声明和实现两个不同的地方,只能有一个地方对同一个参数设置默认值;(2)类的成员函数的默认值,可以是类的静态成员变量;(3)类的转载 2015-06-07 19:32:58 · 3212 阅读 · 0 评论 -
C++ tips: C++ Dark Corner 0 标准流格式化输出
今天需要输出一个双精度型数组到文件上,输出以后发现C++(MPIC++ on 64bit LinuxMint with MPICH2)默认的流输出精度为6,记忆中貌似有这么一回事,需要在流操作符困扰我的是,流输出时是不是要每一个输出变量前都要增加一个setprecision(),于是google着就浮现了一个问题,就是Which manipulator of is sticky?也就原创 2015-06-08 10:47:45 · 675 阅读 · 0 评论 -
Eigen学习笔记
最近由于课题原因,新接触到一个C++的线性代数模板库,名为Eigen(读作 ['aɪgən])。主页位于http://eigen.tuxfamily.org/dox-devel/index.html简单理解Eigen就是对矩阵和向量进行了抽象和建模,并且设计了相关的线性代运算的实现。简单尝试了之后发现上手很快,但是某些功能由于设计理念的独特性,导致最终的实现方案比较特殊。原创 2017-11-06 09:06:16 · 3225 阅读 · 2 评论 -
OpenCV stitching_detailed.cpp 笔记
OpenCV stitching_detailed.cpp 笔记根据4.0.0-pre的文档。 1.函数 template<typename T> Ptr<T> cv::makePtr()返回 一个Ptr<T>类型的对象。 2.SurfFeaturesFinder 为类名,继承自cv::detail::FeaturesFin...原创 2018-11-06 12:04:01 · 2613 阅读 · 0 评论 -
邪恶的复制粘贴
这里写自定义目录标题邪恶的复制粘贴邪恶的复制粘贴记得还是在2010年,或者2011年, 其实我记不太清了, 那个时候开始给课题组写一个三维动力学仿真的程序. 由于自身水平的限制, 代码结构并不是很好, 出现了很多需要将一段代码复制粘贴到另外一个地方的情况. 这真的是一个邪恶的操作, 因为当被复制的代码段, 里面朋友好几处需要根据粘贴位置进行修改时, 就会非常容易忘记修改某些部分. 可能是一个变...原创 2018-12-16 12:17:16 · 402 阅读 · 0 评论 -
原来C++里未注明的浮点数被解释为double类型
最近读了一个SIMD优化过的代码, 里面大片使用了static_cast<>和reinterpret_cast<>. 对这两个函数的具体区别不是很理解, 于是上网研习了一下. 随便了解到一个之前一直忽略的问题, 就是C++中, 以浮点数形式出现的常量, 在结尾未注明 f 时会被解释为double类型.可以参考这篇文章.上面这篇文章中指出, 正确的进行两个整数除法并得...转载 2019-04-13 11:02:54 · 281 阅读 · 0 评论 -
Ubuntu + CUDA + CMake ( + Eigen !?)
目录起因实例起因C++原有实现有点慢,尝试CUDA加速,突发奇想,能不能在kernel或者device函数里面使用eigen,因为eigen是header file only的。然后发现居然真的可以,不过对于kernel函数而言,视乎有点绕。实例在原来CUDA的实例上又搞了一个用eigen的例子。指定图像中的某一个像素为中心,在这个像素附近的窗内对所有像素计算e的指数,再求平方,再窗内像素...原创 2019-05-02 10:09:20 · 1208 阅读 · 0 评论 -
并不习惯处理大整数导致 SIGSEGV 或 SIGBUS 或 "Error: free(): invalid next size"错误
概述最近在调试一段用于处理图像的程序, C++的代码, 需要对每个pixel逐个处理. 在小图像(大约VGA的size)上调试好了需要处理4k size的图像, 一直出现各种离奇错误, 都是和内存有关的, 例如各种SIGSEGV和SIGBUS异常, 在调用free()函数时发生"Error: free(): invalid next size" 错误. 经过仔细排查发现实际上是所用的整形数据类型...原创 2019-05-14 07:33:22 · 420 阅读 · 0 评论 -
修改OpenCV SGBM代码实现per-pixel searching range constrain
新增StereoSGBM实现需要确认我们正在修改的头文件是处于OpenCV的源码路径,而不是OpenCV的安装路径。OpenCV在安装后, 会复制头文件到安装路径。增加MODE标签修改calib3d.hpp内, StereoSGBM类中枚举类型的定义。enum{ MODE_SGBM = 0, MODE_HH = 1, MODE_SGBM_3WAY = 2, MODE_HH4 ...原创 2019-05-30 02:01:19 · 1281 阅读 · 0 评论 -
ubuntu下eclipse+cdt在debug时鼠标悬停背景颜色修改
在ubuntu下使用eclipse+cdt写C++,调试时把鼠标放在变量名称上,会弹出一个提示窗口显示变量的信息,但是这个窗口的背景色是黑色的,和字的颜色非常接近。修改是在ubuntu上而不是在eclipse里。修改方法是桌面点击右键->Change desktop background->Theme->Customize...->Colors->Tooltips把背景色和字体颜色转载 2012-02-28 20:14:32 · 1393 阅读 · 0 评论