自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HLdongdong的博客

路虽远,行则至

  • 博客(61)
  • 资源 (8)
  • 收藏
  • 关注

原创 C++风格_Boost库

只使用 Boost 中被认可的库.定义: Boost 库集 是一个广受欢迎, 经过同行鉴定, 免费开源的 C++ 库集.优点: Boost代码质量普遍较高, 可移植性好, 填补了 C++ 标准库很多空白, 如型别的特性, 更完善的绑定器, 更好的智能指针。缺点: 某些 Boost 库提倡的编程实践可读性差, 比如元编程和其他高级模板技术, 以及过度 “函数化” 的编程风格.结论: 为了向阅读

2017-10-24 19:42:37 1105

原创 C++风格_模板编程

不要使用复杂的模板编程定义:模板编程指的是利用c++ 模板实例化机制是图灵完备性, 可以被用来实现编译时刻的类型判断的一系列编程技巧优点:模板编程能够实现非常灵活的类型安全的接口和极好的性能, 一些常见的工具比如Google Test, std::tuple, std::function 和 Boost.Spirit. 这些工具如果没有模板是实现不了的缺点:模板编程所使用的技巧对于使用c++不是很

2017-10-24 19:40:03 281

原创 C++风格_Lambda表达式

适当使用 lambda 表达式。别用默认 lambda 捕获,所有捕获都要显式写出来。定义: Lambda 表达式是创建匿名函数对象的一种简易途径,常用于把函数当参数传,例如:std::sort(v.begin(), v.end(), [](int x, int y) { return Weight(x) < Weight(y);});C++11 首次提出 Lambdas, 还提供了一系

2017-10-24 19:38:29 334

原创 C++风格_列表初始化

可以用列表初始化。早在 C++03 里,聚合类型(aggregate types)就已经可以被列表初始化了,比如数组和不自带构造函数的结构体:struct Point { int x; int y; };Point p = {1, 2};C++11 中,该特性得到进一步的推广,任何对象类型都可以被列表初始化。示范如下:// Vector 接收了一个初始化列表。vecto

2017-10-23 19:12:54 263

原创 C++风格_auto

用 auto 绕过烦琐的类型名,只要可读性好就继续用,别用在局部变量之外的地方。定义: C++11 中,若变量被声明成 auto, 那它的类型就会被自动匹配成初始化表达式的类型。您可以用 auto 来复制初始化或绑定引用。vector<string> v;...auto s1 = v[0]; // 创建一份 v[0] 的拷贝。const auto& s2 = v[0]; // s2 是

2017-10-23 19:10:01 303

原创 C++风格_sizeof

尽可能用 sizeof(varname) 代替 sizeof(type).使用 sizeof(varname) 是因为当代码中变量类型改变时会自动更新. 您或许会用 sizeof(type) 处理不涉及任何变量的代码,比如处理来自外部或内部的数据格式,这时用变量就不合适了。Struct data;Struct data; memset(&data, 0, sizeof(data));注意:mems

2017-10-23 19:07:47 212

原创 C++风格_0, nullptr 和 NULL

整数用 0, 实数用 0.0, 指针用 nullptr 或 NULL, 字符 (串) 用 ‘\0’.整数用 0, 实数用 0.0, 这一点是毫无争议的.对于指针 (地址值), 到底是用 0, NULL 还是 nullptr. C++11 项目用 nullptr; C++03 项目则用 NULL, 毕竟它看起来像指针。实际上,一些 C++ 编译器对 NULL 的定义比较特殊,可以输出有用的警告,特别是

2017-10-23 19:06:09 236

原创 C++风格_ 预处理宏

使用宏时要非常谨慎, 尽量以内联函数, 枚举和常量代替之. 宏意味着你和编译器看到的代码是不同的. 这可能会导致异常行为, 尤其因为宏具有全局作用域.值得庆幸的是, C++ 中, 宏不像在 C 中那么必不可少. 以往用宏展开性能关键的代码, 现在可以用内联函数替代. 用宏表示常量可被 const 变量代替. 用宏 “缩写” 长变量名可被引用代替. 用宏进行条件编译… 这个, 千万别这么做, 会令测

2017-10-23 19:05:41 241

原创 C++风格_64 位下的可移植性

代码应该对 64 位和 32 位系统友好. 处理打印, 比较, 结构体对齐时应切记:对于某些类型, printf() 的指示符在 32 位和 64 位系统上可移植性不是很好. C99 标准定义了一些可移植的格式化指示符. 不幸的是, MSVC 7.1 并非全部支持, 而且标准中也有所遗漏, 所以有时我们不得不自己定义一个丑陋的版本 (头文件 inttypes.h 仿标准风格):// printf

2017-10-23 19:02:02 636

原创 C++风格_整型

C++ 内建整型中, 仅使用 int. 如果程序中需要不同大小的变量, 可以使用 for (unsigned int i = foo.Length()-1; i >= 0; --i) ...上述循环永远不会退出! 有时 gcc 会发现该 bug 并报警, 但大部分情况下都不会. 类似的 bug 还会出现在比较有符合变量和无符号变量时. 主要是 C 的类型提升机制会致使无符号类型的行为出乎你的意料.因

2017-10-23 18:56:10 194

原创 C++风格_constexpr

在 C++11 里,用 constexpr 来定义真正的常量,或实现常量初始化。定义: 变量可以被声明成 constexpr 以表示它是真正意义上的常量,即在编译时和运行时都不变。函数或构造函数也可以被声明成 constexpr, 以用来定义 constexpr 变量。优点: 如今 constexpr 就可以定义浮点式的真・常量,不用再依赖字面值了;也可以定义用户自定义类型上的常量;甚至也可以定

2017-10-23 18:54:10 260

原创 C++风格_const用法

在任何可能的情况下都要使用 const. 此外有时改用 C++11 推出的 constexpr 更好。定义:在声明的变量或参数前加上关键字 const 用于指明变量值不可被篡改 (如 const int foo ). 为类中的函数加上 const 限定符表明该函数不会修改类成员变量的状态 (如 class Foo { int Bar(char c) const; };).优点: 编译器可以更好地进

2017-10-23 18:52:28 247

原创 C++风格_自增

对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.定义: 对于变量在自增 (++i 或 i++) 或自减 (–i 或 i–) 后表达式的值又没有没用到的情况下, 需要确定到底是使用前置还是后置的自增 (自减).优点: 不考虑返回值的话, 前置自增 (++i) 通常要比后置自增 (i++) 效率更高. 因为后置自增 (或自减) 需要对表达式的值 i 进行一次拷贝. 如果 i

2017-10-23 18:50:21 337

原创 C++风格_类型转换

使用 C++ 的类型转换, 如 static_cast<>(). 不要使用 int y = (int)x 或 int y = int(x) 等转换方式; 定义:C++ 采用了有别于 C 的类型转换机制, 对转换操作进行归类. 优点:C 语言的类型转换问题在于模棱两可的操作; 有时是在做强制转换 (如 (int)3.5), 有时是在做类型转换 (如 (int)”hello”). 另外, C++ 的

2017-10-22 17:31:54 265

原创 C++风格_异常

Google不使用 C++ 异常,这里也存在争议。。。 优点:异常允许应用高层决定如何处理在底层嵌套函数中「不可能发生」的失败(failures),不用管那些含糊且容易出错的错误代码(acgtyrant 注:error code, 我猜是C语言函数返回的非零 int 值)。 很多现代语言都用异常。引入异常使得 C++ 与 Python, Java 以及其它类 C++ 的语言更一脉相承。 有些第

2017-10-22 17:28:59 318

原创 C++风格_友元

允许合理的使用友元类及友元函数.通常友元应该定义在同一文件内, 避免代码读者跑到其它文件查找使用该私有成员的类. 经常用到友元的一个地方是将 FooBuilder 声明为 Foo 的友元, 以便 FooBuilder 正确构造 Foo 的内部状态, 而无需将该状态暴露出来. 某些情况下, 将一个单元测试类声明成待测类的友元会很方便.友元扩大了 (但没有打破) 类的封装边界. 某些情况下, 相对于将类

2017-10-22 17:27:33 209

原创 C++风格_变长数组和alloca()

不允许使用变长数组和 alloca().优点: 变长数组具有浑然天成的语法. 变长数组和 alloca() 也都很高效.缺点: 变长数组和 alloca() 不是标准 C++ 的组成部分. 更重要的是, 它们根据数据大小动态分配堆栈内存, 会引起难以发现的内存越界 bugs: “在我的机器上运行的好好的, 发布后却莫名其妙的挂掉了”.结论: 改用更安全的分配器(allocator),就像 st

2017-10-22 17:26:36 1086

原创 C++风格_缺省参数

不允许使用缺省函数参数,少数极端情况除外。尽可能改用函数重载。优点: 当您有依赖缺省参数的函数时,您也许偶尔会修改修改这些缺省参数。通过缺省参数,不用再为个别情况而特意定义一大堆函数了。与函数重载相比,缺省参数语法更为清晰,代码少,也很好地区分了「必选参数」和「可选参数」。缺点: 缺省参数会干扰函数指针,害得后者的函数签名(function signature)往往对不上所实际要调用的函数签名。

2017-10-22 17:25:20 320

原创 C++风格_函数重载

定义: 编写一个参数类型为 const string& 的函数, 然后用另一个参数类型为 const char* 的函数重载它:class MyClass { public: void Analyze(const string &text); void Analyze(const char *text, size_t textlen);};优点: 通过重载参数不同的同名

2017-10-22 17:24:17 323

原创 C++风格_右值引用

只在定义移动构造函数与移动赋值操作时使用右值引用. 不要使用 std::forward.定义: 右值引用是一种只能绑定到临时对象的引用的一种, 其语法与传统的引用语法相似. 例如, void f(string&& s); 声明了一个其参数是一个字符串的右值引用的函数.优点: 用于定义移动构造函数 (使用类的右值引用进行构造的函数) 使得移动一个值而非拷贝之成为可能. 例如, 如果 v1 是一个

2017-10-22 17:21:47 188

原创 C++风格_引用参数

所有按引用传递的参数必须加上 const.定义: 在 C 语言中, 如果函数需要修改变量的值, 参数必须为指针, 如 int foo(int *pval). 在 C++ 中, 函数还可以声明引用参数: int foo(int &val).优点:定义引用参数防止出现 (*pval)++ 这样丑陋的代码. 像拷贝构造函数这样的应用也是必需的. 而且更明确, 不接受 NULL 指针.缺点: 容易引起误

2017-10-22 17:20:17 412

原创 C++风格_规则特例

所有优秀的规则都允许例外, 这里就是探讨这些特例. google的指南中有这一节,话不能说满,大公司的机智1、现有不合规范的代码对于现有不符合既定编程风格的代码可以网开一面.说明 当你修改使用其他风格的代码时, 为了与代码原有风格保持一致可以不使用本指南约定. 如果不放心, 可以与代码原作者或现在的负责人员商讨. 记住, 一致性 也包括原有的一致性.2、Windows 代码google是UNIX

2017-10-22 17:11:57 207

原创 C++风格_格式

1、行长度每一行代码字符数不超过 80.(这个数是Google的指南中的)80 个字符是最大值.如果无法在不伤害易读性的条件下进行断行, 那么注释行可以超过 80 个字符, 这样可以方便复制粘贴. 例如, 带有命令示例或 URL 的行可以超过 80 个字符.包含长路径的 #include 语句可以超出80列.头文件保护 可以无视该原则.2、字符编码使用 UTF-8 编码.3、空格还是制表位只使用空格

2017-10-22 16:33:48 3106 1

原创 C++风格_注释

注释虽然写起来很痛苦, 但对保证代码可读性至关重要. 注释固然很重要, 但最好的代码应当本身就是文档. 有意义的类型名和变量名, 要远胜过要用注释解释的含糊不清的名字.1、注释风格使用 // 或 /* */, 统一就好.说明 // 或 /* */ 都可以; 但 // 更 常用. 要在如何注释及注释风格上确保统一.2、文件注释在每一个文件开头加入版权公告.文件注释描述了该文件的内容. 如果一个

2017-10-22 15:06:05 913

原创 C++风格_命名规则

1、通用命名规则函数命名, 变量命名, 文件命名要有描述性; 少用缩写.说明 尽可能使用描述性的命名, 别心疼空间, 毕竟相比之下让代码易于新读者理解更重要. 不要用只有项目开发者能理解的缩写, 也不要通过砍掉几个字母来缩写单词.int price_count_reader; // 无缩写int num_errors; // "num" 是一个常见的写法int nu

2017-10-21 23:11:29 1113

原创 C++风格_Google特色

Google 用了很多自己实现的技巧 / 工具使 C++ 代码更加健壮, 我们使用 C++ 的方式可能和你在其它地方见到的有所不同.1、所有权与智能指针动态分配出的对象最好有单一且固定的所有主, 并通过智能指针传递所有权.定义 所有权是一种登记/管理动态内存和其它资源的技术. 动态分配对象的所有主是一个对象或函数, 后者负责确保当前者无用时就自动销毁前者. 所有权有时可以共享, 此时就由最后一个所

2017-10-21 16:44:29 206

原创 C++风格_函数

1、参数顺序函数的参数顺序为: 输入参数在先, 后跟输出参数.C/C++ 中的函数参数或者是函数的输入, 或者是函数的输出, 或兼而有之. 输入参数通常是值参或 const 引用, 输出参数或输入/输出参数则一般为非 const 指针. 2、函数要简短通常一个函数要限制在50行之内。除非是一整个算法,上下联系非常紧密,即使这样也要考虑将其分割。在处理代码时, 你可能会发现复杂的长函数. 不要害怕修改

2017-10-21 14:50:29 462

原创 C++风格_类

1、关于构造函数不要在构造函数中调用虚函数, 也不要在无法报出错误时进行可能失败的初始化.定义 在构造函数中可以进行各种初始化操作.优点无需考虑类是否被初始化.经过构造函数完全初始化后的对象可以为 const 类型, 也能更方便地被标准容器或算法使用.缺点如果在构造函数内调用了自身的虚函数, 这类调用是不会重定向到子类的虚函数实现. 即使当前没有子类化实现, 将来

2017-10-21 14:01:38 698

原创 C++风格_作用域

1、命名空间鼓励在 .cpp 文件内使用匿名命名空间或 static 声明. 使用具名的命名空间时, 其名称可基于项目名或相对路径. 禁止使用 using 指示(using-directive)。禁止使用内联命名空间(inline namespace)。定义:命名空间将全局作用域细分为独立的, 具名的作用域, 可有效防止全局作用域的命名冲突. 优点:虽然类已经提供了(可嵌套的)命名轴线 (Yule

2017-10-21 13:58:53 547

原创 C++风格_头文件

每一个 .cpp的资源文件都有一个与之对应的 .h头文件。main.cpp与系统自动生成项目除外。1、防止多重包含以下两种方式选择其一即可:1)、头文件必须加所有头文件都应该使用 #define 来防止头文件被多重包含, 命名格式当是: _< PROJECT >_< PATH >_< FILE >_H_ .#ifndef _MYLAB_INIT_H_#define _MYLAB_INIT_H_.

2017-10-21 11:36:11 441

原创 博主的C++编程习惯

编程字体选用 Source Code Pro

2017-10-19 12:58:23 330

原创 贪心算法

贪心算法 格式说明:正体的字指教科书式的说法,斜体表示通俗理解贪心算法是通过做一系列的选择来给出某一问题的最优解。把判断放在循环里,每一步都是(在剩下的里面)选最好的设计算法步骤:1、将优化问题转化成一个先做出选择,再解决剩下的问题。指定初始的一个值2、证明原问题总有一个最优解是贪心选择得到的,证明算法是安全的。验证算法3、将子问题的最优解和贪心选择联合起来,可以得到一个最优解。将结果翻

2017-10-15 16:45:12 644

原创 动态规划

动态规划算法的设计分为4个步骤:描述最优解的结构递归定义最优解的值按自底向上的方式计算最优解的值由计算出的结果构造一个最优解

2017-10-14 21:04:09 226

原创 获取数组长度

定义了一个整型数组,利用sizeof()获取数组大小时,发现得到的结果是原来的4倍。 因为一个int型数据,占4个字节,可以这样解决这个问题:1、使用sizeof(test)/sizeof(int)2、使用sizeof(test)/sizeof(test[0])

2017-10-14 16:19:00 352

原创 将 Ubuntu 16 的任务栏移动到桌面底部

快捷键Ctrl + Alt + t打开终端,输入以下命令:gsettings set com.canonical.Unity.Launcher launcher-position Bottom即可将 Ubuntu 16 的任务栏移动到桌面底部 如果想恢复到左侧命令:gsettings set com.canonical.Unity.Launcher launcher-position Left

2017-10-14 14:33:55 790

原创 插入排序算法

插入排序算法一个对少量元素进行排序的有效算法待排序的数也叫关键字(key)

2017-10-14 13:43:28 442

原创 Qt笔记_Quick

图书馆里没有最近两年的书,所以这部分的学习是基于Qt 4的。QtQuick主要由3部分:改进的Qt Creator IDE(包括Qt Quick设计器)新增的QML语言QtDeclarative模块QML是对JavaScript的一种扩展Qt的QtDeclarative模块实现了QML语言和对他适用的元素之间的接口,还提供了一个C++接口,可以用来在Qt/C++应用程序中加载QML文件并与之

2017-10-14 10:09:33 275

原创 Qt 5 小细节

开启对C++11标准的支持;在.pro文件中添加CONFIG += c++11必须使用UTF-8编码(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。

2017-10-13 22:15:56 251

原创 Qt笔记_进程和线程

进程和线程进程Qt的QProcess类用来启动一个外部程序并与其进行通信。 start()可以用来启动一个进程,程序启动后QProcess就会进入Running状态并发射started()信号。线程QThread类提供了与平台无关的线程。

2017-10-13 21:50:20 290

原创 照明小夜灯

一个寝室只有一个灯,晚上座位下更是黑黢黢的。要想看书、写作业,照明是必须的,买一个现成的有失我工科男的风范。自己做才是王道! 先看效果: 两个灯条,一条暖白光60个5050LED。一条冷白光60个5050LED,共计120个LED,亮度没的说,不过我不喜欢冷白光,平时都只用暖白的那一条。 供电的电源参数如图: 接头太麻烦,直接改 毕竟工科生,只把灯通个电,就没啥意思了。 下面上控

2017-10-12 14:27:42 510

win10操作系统下,Qt5编译的opencv3.4

在win10操作系统下使用Qt5编译的opencv库,Qtcreator minGW可直接调用。

2019-04-20

opencv_contrib-4.1.0.zip

github上面下载太慢,还容易卡住,历尽千辛万苦总算是下下来了,这里和大家分享下。opencv_contrib-4.1.0.zip

2019-04-20

cpplint.py文件

cpplint.py 是一个用来分析源文件, 能检查出多种风格错误的工具. 它不并完美, 甚至还会漏报和误报, 但它仍然是一个非常有用的工具. 在行尾加 // NOLINT, 或在上一行加 // NOLINTNEXTLINE, 可以忽略报错.

2017-10-21

PCB书签《扬帆起航》PCB文件

这是本人制作的PCB书签《扬帆起航》PCB文件,可以随意修改,注意上面有本人的名字,介意的话,记得将其删掉。

2017-09-30

PCB书签《青春年华》PCB文件

这是本人制作的PCB书签《青春年华》PCB文件,可以随意修改,注意上面有本人的名字,介意的话,记得将其删掉。

2017-09-30

怎样写好论文?一位大学教授、审稿专家的经验谈

一位审稿专家总结的经验,在他眼中一篇好论文应该是这样的。。。

2017-09-29

时钟屏保小工具

设置时钟效果显示的屏幕保护小工具,以全屏的形式显示小时和分钟。

2017-09-29

数据结构与算法分析C++描述_Mark.Allen.Weiss

数据结构与算法分析C++描述_Mark.Allen.Weiss 电子书

2017-07-06

空空如也

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

TA关注的人

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