C++
「已注销」
这个作者很懒,什么都没留下…
展开
-
x == x
C的表达式 x == x,何时为假呢?即下面的代码: if (x == x) { printf("Equal\n"); } else { printf("Not equal\n"); }什么时候输出为”Not equal”呢?#include <stdlib.h>#include <stdio.h>#include原创 2016-11-19 20:04:15 · 992 阅读 · 0 评论 -
Bridge 模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化。将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化。桥接模式号称设计模式中最难理解的模式之一,关键就是这个抽象和实现的分离非常让人奇怪,大部分人刚看到这个定义的时候都会认为实现就是继承自抽象,那怎么可能将他们分离呢。《大话设计模式》中就Bridge模式的解释:手机品牌和软件是两个概念,不同的软转载 2016-12-17 22:02:58 · 392 阅读 · 0 评论 -
unordered_set笔记
http://www.cplusplus.com/reference/unordered_set/unordered_set/unordered_set 模板原型:[cpp]template < class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc =原创 2016-12-20 20:03:36 · 468 阅读 · 0 评论 -
编译器工作过程
代码要运行,必须先转成二进制的机器码。这是编译器的任务。比如,下面这段源码(假定文件名叫做test.c)。#include <stdio.h>int main(void){ fputs("Hello, world!\n", stdout); return 0;}要先用编译器处理一下,才能运行。$ gcc test.c$ ./a.outHello, world!对于复杂的项目,编译过原创 2017-01-05 23:37:48 · 397 阅读 · 0 评论 -
用GDB调试程序
使用GDB一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:$gcc -g -Wall hello.c -o hello$g++ -g -Wall hello.cpp -o hello如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当原创 2017-01-08 12:14:16 · 253 阅读 · 0 评论 -
unordered_map笔记
unordered_map与map的区别 boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的。顺序就是按照operator< 定义的大小排序。 而boost::unordered_map是计算元素原创 2016-12-20 18:53:39 · 351 阅读 · 0 评论 -
How to (std::)find something efficiently with the STL
原文地址: http://www.fluentcpp.com/2017/01/16/how-to-stdfind-something-efficiently-with-the-stl/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io翻译注释: 原文 翻译 (std::)find 查找 search 搜索翻译 2017-02-05 17:12:32 · 503 阅读 · 0 评论 -
Effective STL 9
条款9:在删除选项中仔细选择 假定你有一个标准STL容器,c,容纳int, Container<int> c; 而你想把c中所有值为1963的对象都去掉。令人吃惊的是,完成这项任务的方法因不同的容 器类型而不同:没有一种方法是通用的。如果你有一个连续内存容器(vector、deque或string——参见条款1),最好的方法是erase-remove惯用法(参见条款32):c.erase(r翻译 2017-01-12 22:17:53 · 486 阅读 · 0 评论 -
STL 的 erase( ) 陷阱-迭代器失效总结
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。1.list,set,map容器在使用 list、set 或 map遍历删除某些元素时可以这样使用:1.1 正确写法 1std::list<int> list;std::list<原创 2017-01-12 21:29:00 · 524 阅读 · 0 评论 -
String's interface
考虑以下代码:bool fun(const string& code){ assert(code.length() >= 2); if (code.substr(0, 2) == string("XX")) { // ... } // ...}有没有发现什么问题? 不要纠结于assert(), 它只是为了保证 string “code” 长度大于2而已.很显然, 这段翻译 2017-02-23 22:51:53 · 251 阅读 · 0 评论 -
c++代码优化建议
记住阿姆达尔定律: Ahmdal’s rule Speedup=timeoldtimenew=1(1−funccost)+funccost/funcspeedupSpeedup =\dfrac{ time_{old}}{time_{new}} = \dfrac{1}{(1-func_{cost})+func_{cost}/func_{speedup}}func_cost是函数func运行时间百分原创 2016-11-19 20:40:27 · 400 阅读 · 0 评论 -
C++11 sort using function objects
如果你用C++编码, 需要对容器内的元素进行排序, 这个容器提供任意访问的迭代器, 比如std::vector, 那么简单快捷的方法是使用里的std::sort 函数.Basic sorting std::sort 函数需要两个参数, 这两个参数分别指向你要排序的序列容器的开始(initial)和终点(final). 这个序列容易内除final指向的那个元素外 所有元素都会被排序. 下面是一个简翻译 2017-02-26 18:21:56 · 495 阅读 · 0 评论 -
Custom comparison, equality and equivalence with the STL
从一段代码引用开始:std::vector< std::pair<int, std::string> > v1 = ... // v1 is filled with datastd::vector< std::pair<int, std::string> > v2 = ... // v2 is filled with datastd::vector< std::pair<int, std::st翻译 2017-02-18 23:21:41 · 395 阅读 · 0 评论 -
C/C++返回内部静态成员的陷阱
在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,如果你熟悉一些转载 2017-04-02 23:43:17 · 413 阅读 · 0 评论 -
strict weak ordering
A strict weak ordering is a binary relation < on a set S that is a strict partial order (a transitive relation that is irreflexive, or equivalently, that is asymmetric) in which the relation neither a转载 2017-05-27 14:42:55 · 342 阅读 · 0 评论 -
时间time_t和string(char*)格式互转
在程序中,我们经常性的会使用到时间格式的转化,比如讲time_t转化成string,或者反过来转,下面就是实现的代码。分为 2009-3-24 和 2009-3-24 0:00:08两种时间格式。 时间格式:2009-3-24 :#include <sys/time.h>/* string to time_t 时间格式 2009-3-24*/int API_StringTo原创 2016-10-05 21:06:48 · 4034 阅读 · 0 评论 -
Ubuntu 12.04 安装eclipse for c++
Ubuntu 12.04 下安装 JDK8方法一:(缺点是安装时附加openjdk等大量程序并无法去除,优点是安装简单)$ sudo apt-get install eclipse方法二:(优点是安装内容清爽,缺点是配置麻烦)1、安装JDK,参考1、下载 JDK 8从http://www.oracle.com/technetwork/java/javas转载 2015-11-16 21:57:46 · 353 阅读 · 0 评论 -
嵌入式 linux gcov
嵌入式linux应用程序调试方法调查嵌入式 linux代码覆盖率测试工具gcov原创 2015-11-25 21:33:40 · 645 阅读 · 0 评论 -
Makefile学习笔记
关于Makefile怎么写,参考http://blog.csdn.net/haoel/article/details/2886一 关于编译和链接 一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object F原创 2015-11-21 22:41:29 · 411 阅读 · 0 评论 -
写String类的普通构造函数,析构函数,拷贝构造函数和赋值函数
编写类String的构造函数、析构函数和赋值函数,已知类String的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); //原创 2016-03-07 20:28:08 · 3308 阅读 · 0 评论 -
Visual C++笔记
04-03-2016创建派生类时,先执行基类的构造函数,再执行派生类的构造函数; 撤销派生类时,先执行派生类的析构函数,再执行基类的析构函数如果基类中含有带参数的构造函数,则派生类必须定义构造函数,用以向基类传递参数如果一个类由多个基类派生出来,则虚基类的构造函数先于非虚基类的构造函数的执行原创 2016-04-03 15:05:06 · 256 阅读 · 0 评论 -
UnitTest 笔记
框架(1) 每个测试用例被包装在一个测试包(suite)中 (2) 每个测试包(suite)是在有效的测试注册单元(Test Registry)中注册的四种测试模式1 Automated Output to xml file 2 Basic Flexible programming 3 Console Console interface 4 Curses Graphical interfac原创 2016-04-27 11:03:53 · 317 阅读 · 0 评论 -
用ATL编写COM并调用
1 新建ATL工程 2 添加一个Class Visual C++ -> ATL -> COM 命名为TestClass 3 用ClassView添加函数Func1,(不是在TestClass类中添加函数,而是在接口ITestClass添加,只有这样,调用它的dll才能看到这个COM里边的函数)不能直接添加代码,因为用ClassView添加函数时,所做的内容除了能直观看到的添加代码原创 2016-05-09 18:23:05 · 452 阅读 · 0 评论 -
查看ocx控件的ClassId
1 下载OLE Viewer,如果已安装VC6.0,在Tools中会有OLE Viewer 2 在Object Classes->Grouped by Component Category->Control里找到相应控件,可以看到详细信息原创 2016-05-10 18:17:34 · 2970 阅读 · 0 评论 -
dll导出导入类
在一个DLL工程中写入一个类并导出,如下:class __declspec(dllexport) Point { public: Point(int _x=0, int _y=0) : x(_x), y(_y) {} private: int x, y; };将编译后的lib和dll文件拷入另一个工程,采用静态链接(指定lib库):类声明如下:class __declspec(dllim转载 2016-04-29 14:26:15 · 756 阅读 · 0 评论 -
HN学习整理
基本原则变量名 = 属性 + 类型 + 对象描述名称要求有明确含义,可以去全称或简称,保证名字的连贯性通用的命名习惯属性部分g_ 全局变量 c_ 常量 m_ 类成员变量 s_ 静态变量 类型部分 a 数组 p 指针 fn 函数 v 无效 h 句柄 l 长整型 b 布尔 f 浮点/文件 dw 双字 sz 字符串 n 短整型 d 双精度浮点 c/cnt 计数 c/c原创 2016-05-04 17:39:43 · 313 阅读 · 0 评论 -
VsTest
1 VS提供了命令下执行单元测试的工具 vstest.console.exe 路径为: E:\VS2015\Program\Common7\IDE\CommonExtensions\Microsoft\TestWindow 2 用vstest.console.exe可以生成格式为.trx的测试结果报告,路径 E:\VS2015\Program\Common7\IDE\CommonExtensi原创 2016-05-05 11:55:32 · 1019 阅读 · 0 评论 -
C++在重载operator=为带模板的函数的时候的陷阱
原文地址 https://segmentfault.com/a/1190000004467381最近被一个语法问题缠了半天,终于找到了原因。不仔细思考一下写的时候真的很容易忽略。先看代码:templatetypename T>class A {public: const T t = 0; templatetypename OtherT> A& oper转载 2016-06-13 13:46:54 · 1514 阅读 · 0 评论 -
fstream学习笔记
1 0720-2016 在使用fstream进行打开文件的操作时,调用fstream或者ifstream的open()函数或直接调用构造函数时,路径总是不正确,后使用getcwd()函数,输出Log,终于知道了当前路径不是源文件所在的路径,也不是exe所在的路径,而是exe所在目录的上层目录,即Makefile所在的目录原创 2016-07-20 21:43:43 · 409 阅读 · 0 评论 -
map写入文件及从文件读出
代码: using std::map;using std::ofstream;using std::ifstream;map<int, int> m = { ... }; // 待存储的map m// 存入文件out.txtofstream of("out.txt");for (const auto &i : m) { of << i.first << ' ' << i.second原创 2016-08-13 11:55:25 · 7775 阅读 · 0 评论 -
How to split a string in C++
这个问题是说, 怎么得到组成一句话的各个单词, 或者得到CSV中的各个数据片段. 这在C++中是个很简单的问题, 却有很多种答案.有3种方案, 每种有利有弊. 使用时请自己选择最佳方案. 这篇文章的目的是说明 迭代器的接口是如何优胜于简单的容器的, 并且阐明 design of the STL 是何等强大. 方案1使用的标准组件(虽然方案1.2 做了微调). 方案2相对好点但使用了boost. 而翻译 2017-06-04 18:40:08 · 506 阅读 · 0 评论