- 博客(120)
- 资源 (4)
- 收藏
- 关注
原创 标准模板库(STL)之 map 列传 (二)
标准模板库(STL)之 map 列传 map 容器的遍历修改 key or value实用的成员函数下标 vs atmap 容器的遍历使用 range-based for 循环访问 map 元素(C++11之后方支持)std::map<std::string, float> coll;...for (auto elem&: coll) std::cout << "key: "
2016-02-29 21:21:52 1122
原创 标准模板库(STL)之 list 列传
list 使用一个 double-linked list (双向链表)来管理元素。只有运用迭代器,才能够访问 list 中的各个元素。也即 list 不支持operator []运算符重载(不开放在这样的接口给用户的目的也恰在于这不是一个高效的访问 list 中元素的方式)。list vs vector空间的利用相较于 vector 的连续线性空间,list 要复杂很多。它的好处在于每次元素的插入
2016-02-29 20:46:36 977
原创 数据结构——红黑树(red-black tree)
红黑树在改变元素数量和元素搜索方面都很出色,它保证节点安插时最多只会做两个重新链接(relink)的动作,而且到达某一元素的最长路径的深度,至多只是最短路径的深度的两倍。STL 中的重要容器——set/multiset 通常以红黑树(red-black tree)实现。
2016-02-29 20:29:00 1727
原创 标准模板库(STL)之 map 列传
1. 模板参数2. 元素的插入与移除(inserting and removing)3. 排序规则只返回true/false,map容器如何实现查重与去重4. 迭代器类型
2016-02-29 17:23:51 1560
原创 工具的使用 —— 键盘
如果一台计算机的基本外设发明的顺序是先有的键盘,后有的鼠标?一个自然的问题即是,在鼠标面试之前的人们是如何操作计算机的。人类走的如此之外,以至于常常忘记自己是从何而来。开启鼠标键:Alt(左)+Shift(左)+Num Lock(位于数字键盘左上角)开启了鼠标键,我们就可以使用键盘以鼠标的方式进行操作了。原则: 能够我们使用的按键主要有:Ctrl:用于加速鼠标指针的移动Shift:用于减缓鼠
2016-02-29 16:29:44 1214
原创 STL 中的容器们 (二)
STL 中的容器们 容器最后一个元素的迭代器我们知道容器:.begin():第一个元素coll[0]的迭代器.end():最后一个元素之前的元素的迭代器所以容器最后一个元素的迭代器为:coll.end()-1;序列式容器 vs 关联式容器 两大类型的容器的一大区别在于:所谓序列式是允许用下标索引(operator[])的;所谓关联式下表索引是无意义的,对map容器而言,虽然重载了op
2016-02-28 21:53:34 943
原创 utilities —— 常见宏定义
C语言宏的特殊用法和几个坑 毫无疑问,宏的理解和运用是提升 C 程序效率的一大关键技术,也是评价一个 C 程序员的重要指标。本文将列举一些经典的宏函数,并给出其注意事项。注意,宏不是函数,没有函数所对应的栈空间,宏仅仅是替换而已。1. 宏的意义(1)关于常量的宏定义,与枚举的使用类似,为一些常量赋予实际的物理意义,提高程序的可读性。2. 最值以最小值为例:#
2016-02-28 20:46:00 1491
原创 可重入函数与不可重入函数
可重入:可重新进入,也即两次进入的现场一模一样?原文地址 什么是可重入函数和不可重入函数(转)在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。不可重入函数
2016-02-28 16:22:11 937
转载 C语言宏的特殊用法和几个坑
原文请见 C语言宏的特殊用法和几个坑总结一下C语言中宏的一些特殊用法和几个容易踩的坑。由于本文主要参考GCC文档,某些细节(如宏参数中的空格是否处理之类)在别的编译器可能有细微差别,请参考相应文档。一、宏基础宏仅仅是在 C 预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见(仅用于文本替换,比如#define N 10000,N出现的位置在宏处理阶段,即被原样替换为10000,二进制代码中不
2016-02-28 16:15:39 2241
原创 面向对象 —— 结构与设计
1. 模型类与控制类让保存数据的类,仅用于数据的持有,除此之外,不向外界提供过多的修改接口(甚至是访问接口),修改(有时是访问)接口统一交由其控制类。举一个不恰当的例子,试卷类仅用于记录成绩,只有教师类(控制类)可对成绩进行一系列的修改和访问。让控制类(操纵数据的类),仅用于操作动作(而不保存数据),操纵的方式主要有两种:维护模型类的对象作为控制类的私有成员变量将模型类的实例以参数
2016-02-28 12:04:42 1323
原创 面向对象——意图与逻辑
编程语言中关键字的本质是什么?是向编译器传达一些信息。何谓意图与逻辑这样古怪的词?比如,对编译器而言,出现const修饰符,就是告诉(意图)编译器,“我不是左值,不可被修改,所有的修改动作都是非法的”。1. virtual同样对于一个类,在该类中兹要出现一次的virtual关键词,就表明,该类是用于继承关系的基类,更进一步,该类中存在纯虚函数(不给出函数体,impure 函...
2016-02-27 21:54:05 1401
原创 面向对象——面向客户端编程
面向对象的因果论,因为存在客户端关于客观事实的抽象(也即所需的类),类间的关系,以及各自的方法,我们才进行类的设计与实现。再次,回到客户端编程时,在主函数(main),在多类、且类间关系较为复杂的局面下,客户端调用时,如何创建不同类的对象?首先需要考虑的是,各类的物理意义(类来源于实际,而抽象于实际),及其对应的构造函数(类间的关系,往往存在于各类的构造,以及各类维护的私有成员变量),类较多时,必将
2016-02-27 21:28:05 1049
原创 工具的使用——windows操作系统的使用(二)
工具的使用——windows操作系统的使用(1)域名解析文件的位置:C:/Windows/System32/drivers/etc/hosts(2)windows7 启动屏幕保护程序【桌面右键】⇒ 【个性化】 ⇒ 【屏幕保护程序】(3)Linux vs Windows 关于分区(a)Windows将硬盘看做“C盘”、“D盘”几个独立的分区不同(b)Linux将整个文件系统看做一棵树,这棵树的
2016-02-27 16:59:53 1336
原创 C 程序的可移植性
不是说 C 语言是一门跨平台的语言吗?不尽然,不同的平台对C语言做了不同程度的支持和拓展,所谓的拓展即是在原有的C标准的基础上,又设计和实现了高层的api。如果只在 windows 平台下开发,或者只在 linux 平台下开发,也即只在单一平台下开发,是不会遇到程序移植性的问题的。本文以windows的观点,认识一些windows为 C 标准库做的拓展,也即如下的函数(api)不具有可移植性,也即
2016-02-27 16:24:34 1435
原创 C 标准库 —— scanf(fflush(stdin))
楔子#include <stdio.h>int main(int, char**){ int a; while (true) { fputs("please input an integer: ", stdout); scanf("%d", &i); printf("%d\n", a); } return 0;
2016-02-27 16:14:47 1208
原创 C 基础——指针函数与函数指针
一、指针函数的定义指针函数,顾名思义,返回指针的函数。其一般定义形式如下:类型名 *函数名(函数参数列表);其中,后缀运算符括号()表示这是一个函数,其前缀运算符星号*表示此函数为指针型函数,其函数返回值为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),类型名表示函数返回的指针指向的类型”。“(函数参数表列)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对
2016-02-27 08:59:31 1015
转载 C基础——文本格式和二进制格式的区别
原文请见 深入:文本格式和二进制格式到底有什么不同?“信息”在机器层面是通过0和1的排列方式来体现的。可是这些0和1如何变成我们在windows环境下的记事本中看到的文本或者图片查看器中看到的图片呢?这里面就有一个编码的问题!所以,二进制文件和文本文件的不同就是编码层面的不同,二进制文件是值编码,而 ASCII 的文本文件文件是ASCII编码。文本编码可以是定长的(如作为基础的ASCII一个字符总是
2016-02-26 22:23:34 1476
原创 C基础——fopen() 的 mode参数
FILE * fopen(const char * path,const char * mode);参数mode字符串则代表着流形态。+:表示可读写,r+:rw,w+:wr,a+:arb:以二进制形式a:追加(append) mode 功能 文件存在的要求 r 打开只读文件 必须存在 r+ 打开可读写的文件 必须存在 rb+ 读写打开一个二进制文件
2016-02-26 22:13:36 2117
原创 C++基础::文件流(二)
C++基础::文件流 字符串流与文件流的交互使用文件流的str()成员函数,将字符流中的数据转换为string类型,再使用<<或>>运算符,将字符串写到流里面;std::stringstream ss;ss << "hello " << 5 << " "<< 5.5;std::cout << ss.str() << std::endl; /
2016-02-26 19:08:48 789
原创 word 的使用(四)—— 对齐与美观(表格)
隐藏段落标记:【文件】⇒ 【选项】⇒ 【显示】,取消段落标记;表格0. 单元格的操作拆分,合并; 1. 双栏 ⇒ 单栏将双栏状态下的表格,拷贝到单栏(正常)状态时,显然表格总体宽度,仅占一半:选中表格,右键;【自动调整】⇒ 【根据窗口自动调整表格】2. 调整单元格的宽度将鼠标置于两水平相邻单元格中间,按住鼠标左键,会给出一个中垂虚线:按住左键,左右拖动:只影响相邻两列单元格的宽度,
2016-02-26 09:51:30 4001
原创 for 循环的流程图等价形式
其实代码形式并未给出执行的流程顺序,反倒是其等价的流程图形式,简洁清晰:由图可知:由菱形表示的表达式2,是一种逻辑判断(二分之)表达式1,仅执行一次;循环体的执行,必须在表达式2为真的前提下才可进行;一旦不满足表达式2,循环立即退出;
2016-02-25 18:42:16 16245
原创 STL 中的容器们(四)
STL 中的容器们 find(查找)函数的返回值的判断对于 STL 容器的find成员函数(其实好像也只有set才支持find成员函数)或者字符串string丰富的查找接口(find、find_first_of、find_last_of。。。)以及<algorithm>提供的全局的find函数(搭配容器使用),在调用之后,首选进行的操作应是,查找成功与否的判断,这是一切后续操作的前提。对strin
2016-02-25 18:35:26 954
原创 提取单词并逆序输出
实现某一算法,需要哪些数据结构(string),这些数据结构需要支持怎样使用的接口(find\_first\_of,find\_first\_not_of),才是本文我们真正关注的内容。因为只有掌握了这些,才真正掌握了算法的实质,当不允许直接调用类似的库(对算法的某些环节支持得较为充分)时,依然心中有数。
2016-02-25 18:14:23 1436
原创 编程常见错误——循环中进行有符号数和无符号数的比较
不要轻视甚至无视,编译器所报的警告,警告不是错误,但比错误更加凶险。也即,我们要追求没有警告的程序。本文,将以编译器经常会报的一个异常:warning C4018: “>=”: 有符号/无符号不匹配 为例说明忽视警告常会伴随一些古怪的结果发生
2016-02-25 17:42:40 2040
原创 C/C++基础::sizeof() 与 sizeof(string)
sizeof(string 对象) ≠ string 对象的.size()成员函数(.size()与.length()不作区别,返回 string 的字符个数)string 的实现在各库中可能有所不同,但在同一个库中相同的一点是,无论string里存放了多长的字符串,它们的sizeof()都是固定的(举个不太恰当的例子,就好比,int a; 无论int变量a取多大的值,sizeof(a)总为4),
2016-02-25 16:05:53 12355 2
原创 C++基础::string(二)
1. 构造接受char*作为单参构造,且该单参未被explicit修饰(赋值即构造)2. 成员函数:.replace()3. std::string::size_type4. s[s.length()]5. 搜索与查找
2016-02-24 19:59:25 945
原创 C++基础::字符串流(stringstream)
1. ss.clear() vs ss.str("")2. str() 成员方法的返回值类型3. 字符串流和文件流的交互4. 字符串流的功能
2016-02-24 16:21:17 7109
原创 C++拾遗
1. static_cast<char> 前置声明(forward declaration)只给出声明,不提供实现(implementation),前置声明分为:类的前置声明;函数的前置声明;字符串的拼接
2016-02-24 15:08:56 884
原创 C++基础::Stream(二)
C++基础::Stream std::endl vs ‘\n’1 The only difference is that std::endl flushes the output buffer, and '\n' doesn’t. If you don’t want the buffer flushed frequently, use '\n'. 两者唯一的不同在于,std::endl刷新
2016-02-24 14:41:45 1053
原创 面向对象——私有成员
私有成员:私有成员变量,私有成员函数;对私有成员变量和私有成员函数的认识 私有函数的存在,避免冗余代码;私有成员变量和私有成员函数一样只开放给自己,所谓只开放给自己,对私有成员函数而言,私有成员函数仅供当前类的其他私有成员函数以及公有函数调用,所以在设计与实现一个类时,应当优先设计一个类的私有成员函数,然后是依赖于该私有成员函数的其他函数。对私有成员变量而言,即是除了当前所属类,其他类无
2016-02-24 14:23:34 1714
原创 如何通过父类引用“调用”子类所独有的方法
该做法的意义何在,姑且不论。今天我们主要关注该功能的实现,至少在实现的思路上是对面向对象思想的一次深入理解。首先一点,父类引用是无法调用子类独有的方法(不仅无法访问,而且是不可见的),结论是显然的,不然该方法就不作为子类所独有了,不然子类就没有任何的独特之处了(隐私空间),也就丧失了子类存在的意义。// C++
2016-02-24 12:21:18 5393
原创 标准模板库(STL)之 vector 列传 (二)
1. 两种搭配2. 容器为空的判断3. 所能容纳的数据类型4. push_back一个新元素5. .resize() 的两个重载6. .clear()的含义
2016-02-24 10:31:57 1249
原创 C++基础::shared_ptr 编程细节(三)
1. boost::shared_ptr std::shared_ptr2. 作为私有成员的共享型智能指针的初始化时机
2016-02-24 10:09:02 1069
matlab字幕拼接用视频截图
2016-01-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人