C++学习
zldeng_scir
菜鸟!
展开
-
C++11 enable_if
C++11 enable_if最清晰的讲解https://eli.thegreenplace.net/2014/sfinae-and-enable_if/转载 2018-10-16 10:45:21 · 1452 阅读 · 0 评论 -
string2int int2string
int string2int(std::string& str) { std::istringstream in_stream(str); int res; in_stream >> res; return res; } std::string int2原创 2012-05-18 16:10:34 · 2979 阅读 · 0 评论 -
运用Autoconf和Automake生成Makefile的学习之路
前言: 这次task,我大概用了4天的时间去完成。四天的时间内,我不停地去查资料,不停的去做小Demo,不停的总结,终于做完了这次的作业。下面的内容记录了我做这次Makefile作业的学习之路。 一、 相关概念的介绍什么是Makefile?怎么书写Makefile?竟然有工具可以自动生成Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本转载 2012-04-22 19:10:52 · 4349 阅读 · 1 评论 -
automake中Makefile.am文件中依赖内容
使用automake自动生成makefile的过程主要有八个步骤:1、建立好源文件以后到源文件所在目录2、autoscan命令 将configure.scan文件修改为configure.in 修改configure.in文件中的内容: AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-A原创 2012-04-22 19:07:41 · 2697 阅读 · 0 评论 -
linux下automake用法
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。 在本文中,将给大家介绍如何使用 autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序转载 2012-04-22 16:06:10 · 17468 阅读 · 3 评论 -
Makefile 参数
Make命令本身可带有四种参数:标志、宏定义、描述文件名和目标文件名。其标准形式为: Make [flags] [macro definitions] [targets] Unix系统下标志位flags选项及其含义为: -f file 指定file文件为描述文件,如果file参数为"-"符,那么描述文件指向标准输入。如果没有"-f"参数,则系统将默认当前目录下名为makef转载 2012-04-22 20:49:12 · 1776 阅读 · 0 评论 -
传递动态内存
当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道.这些往往会使人受尽折磨.所以如果你想深入C/C++编程,你必须静下心来,好好苦一番.现在我们将讨论C/C++里我认为哪一本书都没有完全说清楚,也是涉及概念细节最多,语言中最难的技术之一的动态内存的传递.并且在软件开发中很多专业人员并不能写出相关的合格的代码.【引入】 看下面的例子,这是我们在编写库函数或者项目内的共同函数经转载 2012-05-06 15:35:27 · 645 阅读 · 0 评论 -
程序编译和链接
一个源程序到一个可执行程序一般需要经过预编译、编译、汇编和链接四个步骤。当我们使用IDE编写代码的时候,这些过程IDE都会默认的为我们完成。但是了解这些过程都是做什么是很有必要的。1、预编译 预编译过程主要处理源文件中以“#”开始的预编译指令。比如“#include”,“#define”等,主要处理规则如下:将所有的“#define”删除,并且展开所有的宏定义处理所有的原创 2012-04-24 21:51:24 · 3057 阅读 · 0 评论 -
交换整形变量的方法
1、使用中间变量void swapInt(int& a,int& b){ //detect whether a is equal to b if (a ^ b) { int tmp = a; a = b; b = tmp; }}2、使用异或void swapInt(in原创 2012-03-08 15:29:16 · 608 阅读 · 0 评论 -
使用copy算法输出map中的内容
在C++中,我们常用STL中的copy算法输出序列容器中的元素到输出流。例如我们有一个vector容器,现在我们要将它的内容输出到cout。根据效率考虑,我们不应该使用loop语句实现。我们可以使用copy算法,用习惯i啊棉的语句: copy(vec.begin(),vec.end().ostream_iterator(cout," "));这样就可以使用非常简洁的一行代码实现我们的意图。原创 2011-12-25 16:35:39 · 2358 阅读 · 4 评论 -
c++中,引用和指针的区别
指针和引用的区别(1)引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针. 由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值. String & rs = string1; 由于没有所谓的 null reference 所以所以在使用前不需要进行测试其是转载 2011-12-22 09:47:52 · 569 阅读 · 0 评论 -
#pragma once与 #ifndef的区别
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #转载 2011-12-21 14:28:01 · 461 阅读 · 0 评论 -
并查集学习
l 并查集:(union-find sets)一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。l 并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x) 把每一个元素初始化为一个转载 2012-06-08 10:43:34 · 518 阅读 · 0 评论 -
automake生成静态链接库
在前一篇博客中介绍了使用automake生成动态链接库,这篇博客我们介绍使用automake生成静态链接库。 和上一个博客中的例子相同,项目根目录为test,下面两个子目录是src和fun,fun中含有Fun.h和Fun.cpp,将会用来生成静态链接库,供src中的main.cpp调用。 在fun目录下新建Makefile.am,文件内容为: 第一行原创 2012-05-22 19:32:28 · 2685 阅读 · 1 评论 -
automake同时生成静态链接库和动态链接库
前两篇博客分别介绍使用automake生成静态链接库和动态链接库的方法。有时候我们在一个项目中需要同时生成静态链接库和动态链接库。现在就介绍一下实现的方法。 假设我们的项目根目录为project,下面有三个子目录hello,fun,src,其中hello目录包含hello.cpp和hello.h,用来生成动态链接库。fun目录下面有Fun.cpp和Fun.h,用来生成静态链接库,src原创 2012-05-22 21:17:07 · 1845 阅读 · 0 评论 -
Google protocol buffer多线程锁问题
最近项目中使用到了google protocol buffer作为数据传输格式,google protocol buffer(PB)相对于json来说序列化和反序列化速度都比较快。google protocol buffer的介绍详见:点击打开链接。项目中的使用场景是存在一批数量比较多的数据pair,key为string,value为一个结构体,使用protocol buffer进行存储。使用原创 2015-08-10 17:03:59 · 1964 阅读 · 0 评论 -
Google Protocol Buffer 的使用和原理
转载自:http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/#major1简介什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超转载 2015-03-31 19:50:26 · 595 阅读 · 0 评论 -
【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)
原文转载自:http://blog.csdn.net/slvher/article/details/8864996转载 2014-05-30 10:18:22 · 871 阅读 · 0 评论 -
automake生成动态链接库
最近改一个项目,项目使用C++实现的,以前的师兄们使用的是automake进行编译,上次学习了使用automake进行编译,觉得已经会了,可是一到实践的时候就发现很多问题,特别是使用链接库的时候发现不会了。后来学习了一下,现在将使用方法记录下来,以后复习,也希望可以让遇到问题的朋友找到参考。 1、使用automake生成动态链接库 假设我们现在有一个项目,目录为tes原创 2012-05-22 16:54:25 · 4363 阅读 · 2 评论 -
kmp算法总结
最近看了kmp算法,经过反复的学习终于感觉完全弄懂了kmp算法,现做一个小结。 kmp算法在进行字符串匹配的时候,如果当前位置j匹配不成功,那么模式串向前移动的位数由next[j]的值决定。next数组的位置j的值表示的是模式串p中p[0~j-i]子串的前缀和后缀相匹配的最长长度,即如果next[j]=k,表示p[0~k-1]==p[j-k~j-i],而且p[k]!=p[j]。next数原创 2012-06-28 15:19:32 · 823 阅读 · 0 评论 -
求逆序数算法
求逆序数的算法,其实就是归并排序的原理。只需要在排序的过程中记录一下交换得次数。 这种算法其实是一种动态规划的算法。运用了分治策略,将大问题化作一个个小问题。例如将数组a[]分成b[],c[],左右两个部分。逆序数的个数就是左 数组中逆序数的个数和右数组逆序数的个数,然后将两个数组合并的时候,注意一下左边的数组有多少个数比右边的数组的多少数值要大。 #include #i转载 2012-07-16 08:41:25 · 3166 阅读 · 0 评论 -
二叉树的遍历
二叉树节点的定义: struct treeT{ ElemType key; struct treeT* left; struct treeT* right;}*pTreeT递归实现:先序遍历:void BT_PreOrder(pTreeT root){ if (NULL != root) { visit(root);原创 2012-07-12 10:46:37 · 590 阅读 · 0 评论 -
找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的转载 2012-07-09 17:28:26 · 636 阅读 · 0 评论 -
笔试题总结
1、求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。求一棵二叉树中相距最远的两个节点之间的距离。This is interesting... Also recursively, the longest distance between two nodes must be either from ro转载 2012-07-09 15:07:54 · 594 阅读 · 0 评论 -
线性在散列解决散列冲突
已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key)=key%7计算散列地址,并散列存储在散列表A[0..6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为__________.(52)A.1.5 B.1.7 C.2.0 D.2.3分析:利用该散列函数散列存储结果为68|48 | |38|25|74|5转载 2012-06-25 09:53:23 · 1890 阅读 · 0 评论 -
VIM中常用的替换模式总结
1,简单替换表达式替换命令可以在全文中用一个单词替换另一个单词::%s/four/4/g“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可 如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用转载 2012-06-19 20:40:01 · 1260 阅读 · 0 评论 -
const使用总结
在C++中const用来对目标的性质进行相应的限制,使用const修饰后,不能对目标内容进行修改。特别是当const修饰成员函数的时候,对函数的使用有相应的限制。一般来说,const对象只能调用const成员函数,如果const对象需要调用非const成员函数则需要使用使用mutable修饰变量或者使用this指针进行强制类型转换,而非const对象则可以调用const成员函数以及非const成员原创 2011-08-17 14:01:22 · 758 阅读 · 0 评论 -
C++数组应用之特殊矩阵的压缩存储
矩阵: 矩阵是数值程序设计中经常用到的数学模型,它是由 m 行和 n 列的数值构成(m=n 时称为方阵)。在用高级语言编制的程序中,通常用二维数组表示矩阵,它使矩阵中的每个元素都可在二维数组中找到相对应的存储位置。然而在数值分析的计算中经常出现一些有下列特性的高阶矩阵,即矩阵中有很多值相同的元或零值元,为了节省存储空间,需要对它们进行"压缩存储",即不存或少转载 2011-11-29 13:54:50 · 1620 阅读 · 0 评论 -
RAII惯用法:C++资源管理的利器
RAII是指C++语言中的一个惯用法(idiom),它是“Resource Acquisition Is Initialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。我记得第一次学到RAII惯用法是在Bjarne Stroustrup的《C转载 2011-11-26 18:55:30 · 442 阅读 · 0 评论 -
C++四种类型转换总结
C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。看似问题复杂化了,其实不然。C风格的类型转换在程序语句中难以识别,类型转换是去const,还是int转换成char,或是子类指针转换成父类指针?C括号风格的强制类型转换解决不了这些问题。C++的4种类型转换能够解决原创 2011-08-17 14:45:40 · 675 阅读 · 0 评论 -
C++ 学习笔记1
最近看了《C++ primer》一书,感觉看的挺仔细的,觉得理解的差不多了,今早上开始开算法导论,以前看算法导论的时候都是知道理论,没有动手实现,感觉收获不大。现在再看的时候觉得应该动手实现,加深理解的同时也可以锻炼C++编程。不动手不知道,C++的很多基本知识编程的时候还是不熟原创 2011-08-06 10:17:30 · 518 阅读 · 0 评论 -
插入排序--直接插入排序
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。时间复杂度为O(n^2)。理解:依次将每个待排序的记录插入到一个有序序列的合适位置。插入的位置是和有序序列原创 2011-08-06 16:21:05 · 956 阅读 · 0 评论 -
const iterator与const_iterator
每一种容器类型都定义了自己的迭代器类型。 以vector容器为例: vector::iterator iter; 另外,每种容器类型还定义了一种const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值: for原创 2011-07-30 09:30:46 · 543 阅读 · 0 评论 -
C++ 复制控制
复制构造函数:复制构造函数是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类型的引用。当定义一个新对象并用一个同一类型的对象对它进行初始化是,将显示的使用复制构造函数。当该类型的对象传递给函数或从函数返回该类型的对象时将隐式使用复制构造函数。原创 2011-07-30 20:15:30 · 458 阅读 · 0 评论 -
构造函数初始化列表
在构造函数中,有时必须使用初始化列表对对象成员进行初始化。如果不使用初始化列表,而是在构造函数函数体内进行赋值,例如构造函数如下所示:calss A{public:A(){a = 0;b = 0;}pravite原创 2011-07-30 15:39:41 · 675 阅读 · 0 评论 -
this指针及const成员函数
每个成员函数都有一个额外的、隐含的形参将改成员函数与调用该成员函数的类对象绑定在一起。这个而外的形参就是this,在调用成员函数时,形参this初始化为调用函数的对象的地址。const成员函数的使用:double avg_price() const;该声明就是一个cons原创 2011-07-29 20:42:38 · 1557 阅读 · 0 评论 -
sizeof操作符
sizeof操作符的作用是返回一个一个对象或者类型名的长度,返回类型为size_t。长度的单位是字节,size_of表达式的结果是编译时常量。将size_of应用于表达式时,并没有计算表达式的值,而只是的需要表达式结果的类型。使用size_of的结果部分依赖于所涉及的类型原创 2011-07-30 09:04:39 · 650 阅读 · 0 评论 -
C++ static 变量使用
在C++中,类static变量独立于实际的对象。static变量在类中定义,并且不能附值,需要在类的外面有且仅有定义和初始化静态变量一次。 由于整个类共享静态变量,所以在类外部定义和初始化静态变量时须将其放到任何一个cpp文件中,不能放在.h文件中,否则当多个cpp文件包含h原创 2011-07-29 10:51:07 · 884 阅读 · 0 评论 -
转--C++内存对象总结
如果一个人自称为程序高手,却对内存一无所知,那么我可以告诉你,他一定在吹牛。用C或C++写程序,需要更多地关注内存,这不仅仅是因为内存的分配是否合理直接影响着程序的效率和性能,更为主要的是,当我们操作内存的时候一不小心就会出现问题,而且很多时候,这些问题都是不易发觉的,比如内存泄原创 2011-08-17 15:36:11 · 755 阅读 · 0 评论 -
C++ 内存分配学习笔记
C++将内存划分为三个逻辑区域:栈、堆和静态存储区。其中的对象我们分别称作栈对象、堆对象和静态对象。其中,栈中主要保存局部变量和对象,栈中变量的对象的生成有程序建立,但是删除则是有编译器自动完成,对于系统自定义类型,系统调用类型对应的析构函数(如果有的话),对于某些基本类型,原创 2011-08-18 10:27:11 · 580 阅读 · 0 评论