
C/C++
文章平均质量分 75
然鸟
这个作者很懒,什么都没留下…
展开
-
linux下c++实现文件监控
linux下文件监控原创 2017-08-18 22:24:28 · 5654 阅读 · 0 评论 -
《Effective C++》item25:考虑写出一个不抛异常的swap函数
std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如:[cpp] view plaincopyprint?int main(int argc, _TCHAR* argv[]) { int a[10] = {1,2,3,4,原创 2013-11-22 15:07:49 · 1439 阅读 · 0 评论 -
《Effective C++》item28:避免返回handles(即:Reference、指针、迭代器)指向对象内部成分
避免返回handles指向对象的内部(主要是对象的数据成员有其他类对象)。遵守这个条款可增加封装性(防止通过类的public接口修改对象的值),帮助const成员函数更加像一个const(通过handle间接修改const常量的内部值),并将“虚号码牌“的可能性降低到最低(handle指向一个已经析构了的对象)。原创 2013-11-24 07:09:51 · 1561 阅读 · 0 评论 -
《Effective C++》Item3:尽可能使用const
Answers:(1)const的使用场合有哪些?(2)const的规则?(3)const函数?(4)const STL迭代器?(5)const函数重载?--------------------------------------------------------------------------------------------->Questions:原创 2013-11-10 13:42:55 · 1145 阅读 · 1 评论 -
《Effective C++》Item2:尽量以const,enum,inline替换#define
1.为何要“以编译器替换预处理器”?2.何为“预处理器”?作用是什么?3.何为记号表(symbol table)?4.#define的缺陷和优势?5.const定义常量的好处?6.const定义常量需要注意的几个问题?7.inline相对#define和普通函数的优势?8.enum hack是什么东东?9.enum相对const和#define的优势?什么时候可以使原创 2013-11-10 08:36:46 · 1673 阅读 · 1 评论 -
C++转换构造函数和隐式转换函数
今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数、拷贝构造函数、析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服! 其实我们已经在C/C++中见到过多次标准类型数据间的转换方式了,这种形式用于在程序中将一种指定的数据转换成另一指定的类型,也即是强制转换,比如:int a = int(1.23),其作用是将1.23转原创 2013-11-18 14:30:44 · 3878 阅读 · 2 评论 -
一个编译错误引发的对default构造函数的调用时机的探讨
这是一个很容易让人迷惑的principle!按照我们对C++多态性的理解:定义基类中某个函数为虚函数是为了允许用基类的指针来调用子类的这个函数。通过virtual函数实现程序运行时候的动态调用。原创 2013-11-16 08:39:18 · 1535 阅读 · 2 评论 -
《Effective C++》item11:在operator=中处理“自我赋值”
“自我赋值”是个看似不可能但却又让人望而生畏的东西,貌似几乎不会有人写出 Point p; p = p; 这样的二逼程序,虽然不会出现编译错误,但确实是个能造成异常的语句!What‘s more,这样的“自我赋值”的机会并不少见,我们来看下面这个例子:#include "stdafx.h"#include using names原创 2013-11-16 12:55:44 · 1165 阅读 · 0 评论 -
《Effective C++》之异常安全性和异常安全函数
本篇文章是在学习“《Effective C++》item29:为“异常安全”而努力是值得的”的一个总结,主要介绍C++的异常安全性和异常安全函数。一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源;2.不允许破坏数据。为了让代码具有更好的异常安全性,首先是”用对象来管理资源“,以避免资源的泄漏。其次,在异常安全性等级上,应该尽可能地往更高的等级上来限制。通过 copy-and-swap 方法往往可以实现”强烈保证“。但是我们也应该知道,”强烈保证“并不是对所有的情况都可实现,这取决原创 2013-11-25 16:25:46 · 2836 阅读 · 0 评论 -
关于“error C2871: 'std' : does not exist or is not a namespace”和“Error spawning cl.exe“的解决办法
今天在使用VC6运行程序的时候出现了几个新的error,以前没有碰到,总结一下,希望对其他同学有帮助:1.Error spawning cl.exe 错误分析:这个error一般在点击“Compile”或者“Build”后出现的:“Compiling... ,Error spawning cl.exe”,“cl.exe”是VC使用的真正的编译器(编译程序原创 2013-11-12 12:40:44 · 2276 阅读 · 0 评论 -
c实现内存文件系统
华为软件训练营的一个高级练习题,比较有意思,值得练习一下! 题目不是很难,主要是考察一下几个知识点: (1)数据结构中树的操作,包括树的定义、树的遍历、节点的插入和删除,这里采用了带双亲的孩子兄弟表示法,实际上可以转换为二叉树,可以采用中序遍历的方式访问树的节点。 (2)内存管理。树节点中存放有树的信息,在每次插入一个新节点的时原创 2014-03-06 20:46:42 · 2497 阅读 · 0 评论 -
C++”前置声明“那些事儿
今天在研究C++”接口与实现分离“的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过程中有太多的为什么,而每一个为什么背后都隐藏着一些原理和目的,所以得多问自己”为什么“,这样才不仅知其然,更知其所以然,才能举一反三、融会贯通,这也是我以前学习不够重视的一个问题,好在”亡羊补牢,犹未晚也!“。 C++中将”接口与实现分离“的两个重要目的就是”降低文件间的原创 2013-11-28 14:47:05 · 1738 阅读 · 3 评论 -
《Effective C++》item5:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls.)
阅读本条款内容又有了不少新的收获,虽然本条款比较简单。有些在以往学习c++的过程中一成不变的看法在这里得到颠覆!Questions:(1)空类真的是empty class吗?( Is empty class a empty body class?)(2)copy构造函数和copy assignment操作符?(3)在什么情况下编译器会拒绝为class生成operator=?原创 2013-11-13 14:46:03 · 1316 阅读 · 0 评论 -
《Effective C++》item7:为多态基类声明virtual析构函数
(1)为什么要用虚函数?(2)为什么要定义virtual析构函数?(3)什么时候该定义virtual析构函数和什么时候不该定义virtual析构函数?原创 2013-11-14 21:41:42 · 2080 阅读 · 1 评论 -
C++的”接口与实现分离“实现方法
让我们从stackoverflow上一个同学的问题来开始。问题的原型是这样的(原问题见:class member privacy and headers in C++):Portaljacker:“有一个类A, 有一些共有成员函数和私有数据,如下所示。” class A { public: X getX(); Y getY(转载 2013-11-27 16:04:52 · 2380 阅读 · 7 评论 -
《Effective C++》Item6: 如果你不想使用编译器生成的函数,就该明确拒绝!
通过对item5的学习我们知道:编译器会暗自为class创建default构造函数、copy构造函数、copy assignment操作符以及析构函数。 but,有时候我们不希望我们的类有某些特定功能,通常的做法就是不声明具有这些功能的函数就可以了,however,对于某些与生俱来的功能——比如copy构造和copy assignment,即使我们不声明,系统也会自动生成。原创 2013-11-14 13:41:29 · 1336 阅读 · 1 评论 -
一个VC编译错误引发的对显示类型转换的思考(static_cast、dynamic_cast和const_cast)
error C2662: 'getY' : cannot convert 'this' pointer from 'const class point' to 'class point &' 的解决办法,以及对显示的类型转换static_cast、dynamic_cast、reinterpret_cast、和const_cast的探讨。原创 2013-11-13 16:31:45 · 2596 阅读 · 1 评论 -
《Effective C++》Item4:确定对象被使用前已先被初始化
Questions: (1)为什么需要在对象使用前初始化?(2)关于默认构造函数的几点认识?(3)为什么要使用参数初始化表进行初始化? ----------------------------------------------------------------------------------------------------------------------原创 2013-11-12 21:23:11 · 1406 阅读 · 2 评论 -
《Effective C++》item9:决不在构造和析构过程中调用virtual函数
这是一个很容易让人迷惑的principle!按照我们对C++多态性的理解:定义基类中某个函数为虚函数是为了允许用基类的指针来调用子类的这个函数。通过virtual函数实现程序运行时候的动态调用。 However,是不是只要在基类中使用了virtual函数就一定能够实现这种动态调用呢?是否只要在base class中定义了虚函数,那么在通过基类指针指向子类的时候就一定会调用子类实现原创 2013-11-15 15:13:24 · 1744 阅读 · 8 评论 -
由Point p1 = p和p1 = p的区别想到的关于copy构造函数和赋值操作符重载函数的调用时机问题
今天在论坛上看到一个帖子:http://bbs.youkuaiyun.com/topics/390642928?page=1#post-396087799,涉及到一个copy构造函数和赋值操作符重载函数的调用时机问题,更正了我一直以来的一个对着俩函数的理解上的误区,这个错误相信很多人都会犯过,随后我问了周围几个人,果然不出所料!特此记录,以飨读者! 首先看这样一个简单的程序,涉及到copy构造原创 2013-11-15 11:40:37 · 1550 阅读 · 0 评论 -
[ACM]编程珠玑
你有一条项链,它由 N 个随机排列的红、白和蓝色的珠子组成(3 1 2 1 2 r b b r b r r b r b b b原创 2012-05-02 18:04:19 · 1491 阅读 · 1 评论 -
[ACM]恭喜发财 利是窦来
在中国,过春节时人们有给孩子压岁钱(粤语称为利是)的习俗。最早的压岁钱出现于汉代,又叫压胜钱,并不在市面上流通,而是铸成钱币形式的玩赏物,有避邪的功能。钱币正面一般铸有“万岁千秋”、“去殃除凶”等吉祥话和龙凤、龟蛇、双鱼等吉祥图案。据说嘉兴府有一户姓管的人家,夫妻老年得子,十分珍爱。在年三十晚上,为防止“祟”来侵扰一直逗孩子玩,小孩用红纸包了八枚铜钱,包了又拆,拆了又包,睡下以后,包着的八原创 2012-05-02 09:18:25 · 3273 阅读 · 0 评论 -
calculate the answer of a + b
这是一道acm练习题,原题见“北京理工大学2012年ACM寒假练习题”,http://acm.bit.edu.cn/mod/programming/view.php?a=485 Problem DescriptionNow let’s calculate the answer of a + b ~InputThe input will consist of a set原创 2012-04-26 18:13:43 · 3163 阅读 · 1 评论 -
C++快速排序之sort()
sort()函数是C++中的排序函数其头文件为:#include头文件;sort()相对于qsort()更加灵活,对基本的类型排序不需要定义排序函数1、sort()sort 对给定区间所有元素进行排序stable_sort 对给定区间所有元素进行稳定排序partial_sort 对给定区间所有元素部分排序partial_sort_copy 对给定区间复制并排序n原创 2012-04-30 23:57:15 · 6514 阅读 · 2 评论 -
C程序实现快速从文件输入和输出到文件(ACM练习好帮手)
最近在做ACM练习题,一个程序需哟啊反复调试,而且每次调试都要重复的输入大量的数据,非常的麻烦,如果能够避免每次手动输入,而改为从文件输入那就方便多了,每次调试的时候都从指定的文件读取数据,而不用手动从控制台输入,freopen函数很好的实现了这一功能:函数原型:FILE * freopen ( const char * filename, const char * mode, FIL原创 2012-05-01 00:22:32 · 2075 阅读 · 0 评论 -
[ACM]Look up the words in the dictionary
DescriptionYou have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.原创 2012-05-01 00:31:50 · 2225 阅读 · 0 评论 -
C程序快速排序之qsort()
qsort包含在头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。其排序是根据二分法写的,其时间复杂度为n*log(n)。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数。 其实qsort的用法跟sort十分的相像。关于sort的用法见下一篇文章。函数原型:void qsort ( void * base, size_t n原创 2012-04-30 23:45:40 · 1170 阅读 · 0 评论 -
深入浅出之背包算法——动态规划是如何打败递归的?
背包问题(Knapsackproblem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。这个问题涉及到了两个条件:一是物品总的大小小于或等于背包的大小,二是物品总的价值要尽量大。 一.采用递归的回溯法 刚开始接触此类问题时,很多人都会想到用回溯法解决,也就是原创 2012-04-25 00:00:43 · 1263 阅读 · 0 评论 -
[ACM]暗算 2.0
背景此“暗算”非彼《暗算》 ,虽然我们没有电影中阿柄惊人的听力,可以辨别破译密码,但是我们也可以成为破译专家。现在就来给大家作一个集训:改变阿拉伯字母的顺序是文本加密中十分常用的方法,但是并不安全。也就是说,把文本中的每一个阿拉伯字母都要一致地替换成一些其他的字母。为了保证加密的可逆性,需要每个阿拉伯字母都有唯一一个替换的字母(也就说,任意两个阿拉伯字母都不可以用同一个字原创 2012-05-01 00:46:18 · 1412 阅读 · 1 评论 -
[ACM]POJ1163 The Triangle
DP 数字三角形Description........7......3 8....8 1 0..2 7 4 44 5 2 6 5(Figure 1)Figure 1 shows a number triangle. Write a program that calculates the highest原创 2012-05-01 22:32:55 · 1713 阅读 · 1 评论 -
[ACM]POJ1979 Red and Black
题目来源:北京大学POJ http://poj.org/problem?id=1979DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. Fro原创 2012-05-02 12:17:04 · 2065 阅读 · 0 评论 -
[ACM]孤独的运货员
背景航空公司的货运飞机往返于各个国家和货物分理中心之间,分理中心的货物运送到各个国家,再将各个国家发出的货物送到分理中心。分理中心非常庞大,每个国家都有一个自己的货运站,每个货运站有两个平台用于堆放货物。其中 A 平台用于堆放运送到该国的货物,而 B 平台堆放着其它国家的货物。各个国家的货运站排成一个环形。平时,有货运汽车沿着环形的线路在各个国家的货运站之间运行。货运汽车的仓库是非常狭原创 2012-05-07 13:17:55 · 2732 阅读 · 0 评论 -
在scanf中使用正则表达式
[]内是匹配的字符,^表示求反集,当遇到非集合内的字符时立即终止输入 1. 输入指定范围的小写字母,遇到非法字符立即终止 scanf("%[a-z]",str1); printf("%s\n",str1); 输入:abc123 输出:ab //输入带空格的自定范围的字符串 scanf("%[a-z A-Z0-9原创 2012-05-06 10:24:35 · 2178 阅读 · 1 评论 -
[ACM]切木头
背景人们需要把一跟很长的木头切成几段,有一家名为 Analog Cutting Machinery (ACM) 的公司正在经营这一业务。他们根据切割前木头的长度来收费,木头越长、收费越高,并且每切割一次就收一次费。显而易见,在这里切割木头时,不同的切割顺序就会产生不同的价钱。譬如一跟 10 米长的木头,需要在 2、4、7 米处切开。如果顺序在这三个位置切割,需要的费用是 10 + 8 +原创 2012-05-03 10:08:53 · 1403 阅读 · 0 评论 -
如何求1到N的数的全排列
// 求N个数的全排列 #include "stdafx.h"#include #include #include using namespace std;#define N 5int n = 0;void output(int str[N], int begin){ if (begin == N - 1) { for (int i = 0; i < N; i+原创 2012-04-14 21:00:26 · 2376 阅读 · 0 评论 -
[ACM]图形编辑器
原题见:http://acm.uva.es/p/v102/10267.html背景图形编辑器(graphical editor)允许用户改变位图图像,比如大家经常用到的Photoshop。它所采用的改变方法和文本编辑器允许修改文档的方法一样。位图图像由MxN的像素矩阵来表示,并且每个像素点都有给定的颜色。我们的任务就是来要编写一个程序来模拟一个简单的交互式图形编辑器。输入原创 2012-05-04 17:56:26 · 1455 阅读 · 0 评论 -
[ACM] Where's Waldorf?
BackgroundGiven an m by n grid of letters and a list of words, find the location in the grid at which the word can be found.A word matches a straight, uninterrupted line of letters in the grid. A原创 2012-05-03 16:04:58 · 875 阅读 · 0 评论 -
[ACM]穿越矩阵
现在有一个 m * n 的整数矩阵,请你编写一个程序计算出一条从左到右穿过矩阵的路径,并使此路径的费用最小。路径从矩阵的左侧的第一列的任意单元格开始,逐步穿过矩阵到达最右侧的一列的任意单元格。每一步是指从某单元格进入它一列的相邻单元格(如下图,可以是横向或斜向)。矩阵的第一行和最后一行实际是相邻的,你可以想象矩阵是包裹在一个横放的圆柱体外面。路径的花费是指这条路径所穿越的所有单元格中的数字原创 2012-05-03 16:27:03 · 2144 阅读 · 0 评论 -
动态规划学习之三种方法解决斐波拉契数
斐波拉契数是一个很经典的问题,也会很多公司面试的考题,每个学习计算机的同学都会接触这个问题,尤其是在学习递归的时候,利用递归来解决斐波拉契数是很多教材采用的一个例子,所以很多同学一想到斐波拉契马上就会采用递归,递归貌似简单,但是效率真的很高吗?不然!下面是我在学习动态规划的过程中总结的集中解决斐波拉契数的不同方法:一、最野蛮最原始的方法long f0(int n){ if (n =原创 2012-05-03 09:23:24 · 1864 阅读 · 0 评论 -
2011ACM大赛题目之贪吃蛇算法
一条贪吃的蛇在一个n*m的网格中游走,它只能从一个方格走向另一个相邻的方格,这里相邻的意思是两个方格有公共边。每个方格可以看作是一个房间,其中一些是空的,一些存放有苹果。贪吃的蛇根本不进入空的房间,而进入有苹果的房间后就可以带走所有苹果使房间成为空的。蛇从一个指定的房间出发,最终回到它的家,把一路带来的苹果存储到家中,当然,它希望带来的苹果最多。请编写程序,输入有整数n和m,及n*m的一个矩阵,矩原创 2012-04-23 23:16:33 · 3477 阅读 · 2 评论