
学习笔记
文章平均质量分 60
风海流
Robotics Institute, Carnegie Mellon University
huyaoyu.com
展开
-
Unreal Engine 4.25 Visual Studio Code intellisense error
最近在搞Unreal Engine。UE4.25 配合VSCode有个bug,就是生成的VSCode project文件的C++描述部分有误,导致VSCode的intellisense不能正常工作,表现为找不到如下文件UBT_COMPILED_PLATFORM/UBT_COMPILED_PLATFORMPlatformCompilerPreSetup.h并伴随着自动补全和语法高亮出现问题,也无法在输入函数参数时获得函数定义的提示,更无法鼠标悬停获得对象的定义描述。经过Google后发现,这个bug原创 2021-03-16 15:31:40 · 1539 阅读 · 0 评论 -
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 · 683 阅读 · 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 评论 -
kornia 之一 基础和 filter
目录起因经过常规import基本操作结果起因夏天时课题组一个小哥推荐了kornia这个库,传说是把一些典型的一些cv操作基于PyTorch设计成了differentiable的,辅助进行深度学习模型的训练。但是一直也没有仔细看过或者用过这个库,最近一个模型中需要用到一些常见的filter操作,于是想到了这个库,尝试了一下把所见所感写在这里作为记录。经过当前kornia的版本是0.4.0. kornia 也在不断更新中。其实PyTorch更新也挺勤的。。。常规import若没有另外描述,那么如下i原创 2020-10-23 13:45:03 · 4818 阅读 · 5 评论 -
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 · 2449 阅读 · 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 评论 -
PCL NormalEstimation 源码结构
前言最近需要借鉴PCL的设计写一个处理点云的程序,主要参考了其中NormalEstimation部分的源码。这里总结一下该部分源码的结构。当前参考的PCL版本是 1.10.0。NormalEstimationNormalEstimation类的继承关系如下NormalEstimation->Feature->PCLBase这三个类的定义位于源码根目录下的common/i...原创 2020-03-19 09:14:43 · 1341 阅读 · 0 评论 -
pytorch3d 上手测试
前言最近Facebook放出了PyTorch3D,用于3D Computer Vision research。尚不知都可以做些什么。最近正在做3D point cloud和mesh相关的处理,也有深度学习的东西,由于前两天nvidia的一个在线webinar,还有目前老板都对我推荐了这个,所以今天上手测试一下。后记测试完所有4个目前的tutorial之后,可以简单总结如下。PyTorch3D...原创 2020-03-15 06:39:48 · 5812 阅读 · 12 评论 -
PyTorch 学习笔记 (3) PyTorch 1.0+ C++/CUDA extension
参考教程PyTorch官方教程本机系统Ubuntu 18.04 LTSNVIDIA GeForce GTX 1080 with driver 430.50CUDA V10.1.243python 3.6.8 virtualenvtorch.version == ‘1.2.0’Visual Studio Code配置由于我使用的是python 的virtual environme...原创 2019-11-20 06:07:13 · 3142 阅读 · 7 评论 -
JAVA学习笔记7 - 方法
概况方法的定义与C++句法非常接近。但貌似方法都依赖于类而存在。注意static关键字调用的自身类的方法也必须是static类型的。作用域与参数传递作用域和C++的概念基本一致,甚至包括花括号的作用域。注意,在Java中,对象都是采用“引用”来表达的。所以在对象的赋值过程中,都是引用本身的赋值,而对象本身并没有被拷贝。在Java的方法(函数)都是传值的,对于对象,实原创 2018-02-04 01:19:29 · 185 阅读 · 0 评论 -
JAVA学习笔记6 - 数组
dataType[] arrayRefVar = new dataType[arraySize];高维数组却采用如下方法声明。type arrayName[][] = new type[arraylenght1][arraylenght2];0索引,采用 [ ] 索引。数组具有length属性,一个数组定义后,不能修改长度。Java设计有一个Arrays类,原创 2018-02-04 01:19:15 · 189 阅读 · 0 评论 -
JAVA学习笔记5 - Number类,Math类,Character类,String类,StringBuffer类
Number和Math类内置数据类型例如int和double,都对应有类,例如Integer和Double。这些类都是从Number类继承,具有一些内置方法,可参考Number类和Math类比较有意思的是Number类的toStrig()方法。注意如下语句不代表f为Double类的对象。double f = 1.1;而下方表达式才是Double f = 1.1;Math类中的方法都是静态的,可以直...原创 2018-02-04 01:18:59 · 305 阅读 · 0 评论 -
JAVA学习笔记4 - 循环与分支结构
循环结构包括while循环,do...while循环和for循环。while和do...while循环与C++一致,do...while循环末尾也需要分号。for循环语句结构与C++一致。JAVA提供一种增强型的for循环语句for ( 变量声明 : 数组或返回数组的函数 ){ // 循环语句。}声明的变量作用域在for循环内部,并且类型必须与数组的元素原创 2018-02-04 01:18:42 · 290 阅读 · 0 评论 -
JAVA学习笔记3 - 运算符
算术运算符与C++一致,有++和--。与C++一致,除号运算自动识别整数除法。与C++一致,关系运算符为==,!=等。位运算为&,|,^(异或)和~(非),支持> 两种移位运算。逻辑运算符:&&,||,!。&&和||都具有“短操作”特性,即在使用 && 时,若左侧已经为假,那么右侧将不执行。在使用 || 时,若左侧已经为真,那么右侧将不执行。赋值运算与C++一致原创 2018-02-04 01:18:22 · 189 阅读 · 0 评论 -
JAVA学习笔记2 - 变量类型与修饰符
变量都是在class内部的。变量有类变量(static的成员变量),实例变量(既非static的成员变量),局部变量(方法中的变量)。类变量可在声明时既赋值。变量、类、方法可以施加修饰符,以下关键字为修饰符default, private, public, protectedstatic, finalfinal类不能被继承,final方法不能原创 2018-02-04 01:17:54 · 136 阅读 · 0 评论 -
JAVA学习笔记8 - Stream 和 File I/O
从控制台读取字符使用java.io.*。以下代码出处为这里。读入字符和字符串均需要输入回车才能开始read。读入字符所有已输入字符会逐个被处理。回车也会被计入在列。import java.io.*;public class StreamConsoleChar { public static void main(String[] args) throws IO原创 2018-02-04 01:19:44 · 738 阅读 · 0 评论 -
JAVA学习笔记9 - 异常
Java本身定义了多种费检查性和检查性异常。throws/throw如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws关键字来声明。多个不捕获异常用逗号隔开。使用throw语句抛出异常。try/catchtry/catch块,结构与C++非常类似,但增加了finally快。finally块在catch块内的return之前执行,若finally块中有原创 2018-02-04 01:19:55 · 217 阅读 · 0 评论 -
JAVA学习笔记10 - 继承
与C++不同,只能单一父类。继承与多态extends关键字。implements关键字(与接口有关,类似多个父类的行为)。构造函数中用super()调用父类构造函数(若需要使用父类的无参构造函数,则可不显式调用super(),但是显式调用比较好)。使用super来引用父类对象。使用this来对当前对象引用。声明类时使用final关键字,表示该类不能被继承原创 2018-02-04 01:20:08 · 273 阅读 · 0 评论 -
JAVA学习笔记11 - 接口interface
简单理解interface是一种特殊类型,或者特殊的class。这个特殊类型中可包含属性和方法,但是这些方法必须(自动)为public abstract的(并且不可在interface中实现),属性只能(自动)为public static final类型的。interface中不可有静态方法。interface不能有构造函数。对应于interface的为“实现”implement,对应于c原创 2018-02-05 00:41:52 · 245 阅读 · 0 评论 -
JAVA学习笔记12 - 包package
package给人的感觉是逻辑上和文件系统上实现的名称空间。java文件若指定package名,需要在开始指定。java文件若不指定package名,那么将会被放入一个特定的默认名称空间。import时可以使用*号导入一个包中的所有类。当同一个java文件import的不同package中存在有相同class名时,有两种处理方法:(1)使用class的全名,原创 2018-02-05 00:42:26 · 174 阅读 · 0 评论 -
PyTorch的学习笔记02 - backward( )函数
0.4.0版教程。20191126更新:添加了关于CopySlices backwar函数的讨论。创建一个Tensor时,使用requires_grad参数指定是否记录对其的操作,以便之后利用backward()方法进行梯度求解。 一个Tensor的requires_grad成员保存该Tensor是否记录操作用于计算梯度。 可利用requires_grad_()方法修改Tenso...原创 2018-07-16 11:41:42 · 58964 阅读 · 23 评论 -
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 · 2614 阅读 · 0 评论 -
JAVA学习笔记1 - 类和变量类型
首先,声明数组采用如下格式ine[] array = {1,2,3};类一个java文件中,仅能有一个public类。这个public类需要有一个public static void main()方法作为程序入口。main()函数的参数推荐使用String[] args。java文件的一开始是package语句,接下来是import语句,之后是类定义,次序不能颠倒。于C原创 2018-02-04 01:17:33 · 245 阅读 · 0 评论