C++
文章平均质量分 77
feliciafay
开发工程师
展开
-
C++Primer学习笔记第三章(3/18) 标准库类型
标准库类型:标准库类型是C++自定义的抽象数据类型标准库。如string, vector, bitset等。 命名空间的using声明:using namespace::name 标准库stringe类型的使用:#include using std::string; 标准库string对象的定义和初始化:string s1; 或者strin原创 2010-04-28 01:13:00 · 1162 阅读 · 1 评论 -
C++Primer学习笔记第二章(2/18) 变量和基本类型
整型:整型short, int, long可以是带符号的,也可以是不带符号的。默认带符号。 带符号整型:表示正数,0和负数。为了体现符号,其中一个位为符号位。 无符号整型:表示正数和0。 关于赋值时的越界:大部分编译器是这样工作的。编译器在给无符号整型赋值时,正常情况下,不能赋予负数。但是,如果出现了负数赋值给无符号整型的情况,编译器将对该负数原创 2010-04-26 22:30:00 · 1481 阅读 · 4 评论 -
C++Primer学习笔记第四章(4/18) 数组和指针
数组和指针:容器和迭代器-----[类比]---à 数组和指针。推荐使用容器和迭代器以避免犯错。数组和指针容易出错。 数组的定义:数组的维数必须用大于等于1的常量表达式定义。常量表达式包括整型字面值常量,枚举常量或者用常量表达式初始化的整型const对象。 数组的显示初始化:把初值用逗号分隔起来,并且用花括号括起来。const unsigned array_原创 2010-04-29 10:57:00 · 967 阅读 · 0 评论 -
一道和位与操作(&)相关的趣题
在google的TopLanguage论坛中看到一道题目,和位与操作(&)相关。 先简单回顾一下什么叫做位与操作符:位与操作(&)需要两个整型操作数,在每个位的位置,如果两个操作数对应的位都为 1,则操作结果中该位为 1,否则为 0。unsigned char b1 = 0145; 表达为二进制,结果如下0 1 1 0 0 1 0 1unsigned char原创 2010-04-29 21:18:00 · 2187 阅读 · 0 评论 -
C++Primer学习笔记第六章(6/18)语句
空语句:程序语句最简单的形式是空语句如果在程序的某个地方,语法上需要一个语句,但逻辑上并不需要,此时应该使用空语句。这种用法常见于在循环条件判断部分就能完成全部循环工作的情况。例如,下面程序从输入流中读取数据,在获得某个特殊值前无需作任何操作: while (cin >> s && s != sought) ; // null statement(使原创 2010-05-03 01:34:00 · 754 阅读 · 0 评论 -
C++Primer学习笔记第五章(5/18)表达式
操作符:C++提供了丰富的操作符,并且支持操作符重载。标准库正式使用这些功能定义用于库类型的操作符。 表达式:表达式由一个或者多个操作数通过操作符组合而成。可以简单到只有一个字面值常量或者变量,也可以由操作符以及一个或者多个操作数构成。 算术操作符:按优先级降序第一组: +(正), -(负)按优先级降序第二组: *, /, %按优先级降序第三组: +(加),原创 2010-04-30 01:21:00 · 1016 阅读 · 0 评论 -
C++Primer学习笔记第七章(7/18)函数
函数调用:当函数调用发生时,程序用对应的实参初始化函数的形参,并将控制权转移给被调用函数。主调函数的执行被暂停,被调函数开始执行。 函数体是一个作用域:函数体是一个作用域。在函数体内定义的变量只在该函数中才可以访问,名字之在该函数的作用域中可见,且只在函数运行时存在。这种变量称为局部变量。 函数形参:1函数形参表中,f如果两个参数具有相同的类型,则其类型必须重复声明原创 2010-05-11 01:33:00 · 916 阅读 · 0 评论 -
C++Primer学习笔记第八章(8/18)标准IO库
标准IO库:标准库定义了一族类型,支持对文件和控制窗口等设备的读写,还使得string对象能够像文件一样操作。采用继承来实现。 流:是以字节方式对数据从源到目标进行传递的一种描述。 输入流:指从输入设备到内存中字节的传递;输出流:指从内存到输出设备中字节的传递; iostream类库的接口对应的头文件:头文件iostream包含所有i/o流所需的基本信息,并定原创 2010-05-13 13:16:00 · 979 阅读 · 0 评论 -
关于getline()
我一直不清楚getline()和get()的区别,最近看了C++ Primer,终于增加了一些了解今天先写写getline()这个函数。 用一个函数来观察getline()的使用特点。函数如下:void getlineDemo1(){ cout char wordArray1[5]; char w原创 2010-05-18 02:06:00 · 1353 阅读 · 0 评论 -
C++Primer学习笔记第九章(9/18)顺序容器-(上)
顺序容器简介:标准库定义了三种顺序容器类型:vector、list 和 deque。标准库还提供了三种容器适配器(adaptors)顺序容器的定义:#include //第一种vector svec; //第一种#include //第二种list ilist; //第二种#include //第三种deque items; //第三种顺序容器的初始化:① C c; ② C c(c2);③ C c(b,e);//创建 c,其元素是原创 2010-06-23 01:32:00 · 637 阅读 · 0 评论 -
C++Primer学习笔记第九章(9/18)顺序容器-(下)
<br />容器定义的类型别名<br />1size_type<br />2 iterator, const_iterator, reverse_iterator, const_reverse_iterator, difference_type, value_type<br />3reference<br />4const_reference<br /> <br /> <br /> <br />顺序容器的操作1—访问<br />c.begin() 返回类型ite原创 2010-09-19 19:10:00 · 1766 阅读 · 0 评论 -
C++Primer学习笔记第十章(10/18)关联容器
关联容器概述map 键值对(一个键对应一个值,键不可重复。如字典,单词是键,词义为值)set 键对(键的集合,键不可重复)multimap 键值对(一个键对应多个值,键不可重负)multiset 键对(键的集合,键可以重复)特点容器元素根据键的次序进行排列。pair类型的操作① pair p1 如pair poetry;pair word_count②原创 2010-09-23 01:58:00 · 1115 阅读 · 0 评论 -
C++Primer学习笔记第十一章(11/18)泛型算法
算法概述大多数情况下,每个算法都需要使用(至少)两个迭代器指出该算法操纵的元素范围,我们将这段范围称为“输出范围(input range)”。第一个迭代器指向第一个元素,而第二个迭代器则指向最后一个元素的下一位置。第二个迭代器所指向的元素[有时被称为超出末端迭代器]本身不是要操作的元素,而被用作终止遍历的哨兵(sentinel)。理解算法的最基本方法是了解该算法是否读元素、写元素或者对元素进行重新排序。泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。算法基于迭代器及其操作实现,而并非基于容原创 2010-09-25 03:18:00 · 850 阅读 · 0 评论 -
C++Primer学习笔记第十二章(12/18)类
构造函数创建一个类类型的对象时,编译器会自动使用一个构造函数(第 2.3.3 节)来初始化该对象。构造函数是一个特殊的、与类同名的成员函数,用于给每个数据成员设置适当的初始值。构造函数一般就使用一个构造函数初始化列表(第 7.7.3 节),来初始化对象的数据成员:Sales_item(): units_sold(0), revenue(0.0) { }成员函数在类内部,声明成员函数是必需的,而定义成员函数则是可选的。在类内部定义的函数默认为 inline。const 成员不能改变其所操作的对象的数据成员。c原创 2010-09-28 02:12:00 · 788 阅读 · 0 评论 -
《算法导论》第六章 heapsort
根据《算法导论》第六章,写了heapsort的代码,如下:// HeapSort.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include using namespace std;#define N 1000void HeapSort(int *a, int &heapsizeA);void BuildMax原创 2010-11-29 09:49:00 · 719 阅读 · 0 评论 -
《算法导论》第七章 quicksort
<br />根据《算法导论》第七章,写了代码如下:<br />// QuickSort.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <fstream>using namespace std;#define N 1000void quickSort(int* a,int p, int r);int原创 2010-11-29 09:52:00 · 1018 阅读 · 0 评论 -
C++Primer学习笔记第十四章(14/18)类 重载操作与转换
<br />重载操作符基础<br />1重载操作符的形参数目(包括成员函数的隐式 this 指针)与操作符的操作数数目相同<br />2重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。<br />3作为类成员的重载函数,其形参看起来比操作数数目少 1。作为成员函数的操作符有一个隐含的 this 形参,限定为第一个操作数。<br />4 一般将算术和关系操作符定义非成员函数,而将赋值操作符定义为成员。<br />5 操作符定义为非成员函数时原创 2010-10-28 20:55:00 · 600 阅读 · 0 评论 -
C++Primer学习笔记第十六章(16/18)类 模型与泛型编程
<br /><br />模板形参<br />模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明,。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class 和 typename 没有区别。<br />模板形参遵循常规名字屏蔽规则<br /> <br />为什么定义了size_type这个东西<br />例如,标准库的容器类定义了不同的类型,如 size_type,使我们能够以独立于机器原创 2010-10-28 21:41:00 · 575 阅读 · 0 评论 -
马克(马克阅读CPPP的结束并且马克阅读CLRS的开始)
昨天看完了C++ Primer(CPPP)的前十六章。还剩两章基本上没看,不过目前不打算看完了,因为看不太懂,等遇到大型程序中的问题时再看。今天开始看算法导论(CLRS)。算了一下,时间跨度为6个月,中途因为一些事情断断续续,没有实现一开始预定的时间目标。把断断续续的时间累加起来,应该有两个月是完全没有履行进度表。也就是说,实际的阅读时耗是120天,每天平均投入3个小时。1 关于时间管理 如果可以立即完成,一定立即完成。 如果不能立即完成,很多时候我都会调入拖延的陷进中去,这是大忌。此刻,应该做两件原创 2010-10-29 14:49:00 · 8542 阅读 · 0 评论 -
八卦几个专业术语(键码和句柄)
<br />N天之前想到,为什么key要翻译为键呢,太难以理解了。<br />不知之就搜索之。key的翻译来自于日语,日语中的“键”的含义是钥匙,而且读音也和英文的key读音接近。<br /> <br />那么,关于这个问题想到两点。首先,是还有哪些来自日语的专业术语?其次,将这个问题扩大一下,还有哪些类似的专业术语,在扰乱人的思维?<br /> <br />关于第一点。还有哪些词也是这样来自于日语的呢?<br />键盘,键码,举例来说,Evolution一词现在中日通译进化,但严复在《天演论》中译得的却是原创 2010-10-28 21:22:00 · 1622 阅读 · 0 评论 -
C++Primer学习笔记第十六章(16/18)类 模型与泛型编程
<br /><br />模板形参<br />模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明,。类型形参跟在关键字 class 或 typename 之后定义,例如,class T 是名为 T 的类型形参,在这里 class 和 typename 没有区别。<br />模板形参遵循常规名字屏蔽规则<br /> <br />为什么定义了size_type这个东西<br />例如,标准库的容器类定义了不同的类型,如 size_type,使我们能够以独立于机器原创 2010-10-28 21:42:00 · 709 阅读 · 0 评论 -
C++Primer学习笔记第十三章(13/18)类 复制控制
<br />复制控制<br />复制构造函数、赋值操作符和析构函数总称为复制控制。编译器自动实现这些操作,但类也可以定义自己的版本。<br /> <br />合成复制构造函数<br />如果我们没有定义复制构造函数,编译器就会为我们合成一个。<br />如果我们定义了复制构造函数,编译器也会为我们合成一个。<br />合成复制构造函数的行为是,执行逐个成员初始化,将新对象初始化为原对象的副本。<br />class Foo {<br /> public:<br /> Foo();原创 2010-10-28 20:39:00 · 677 阅读 · 0 评论 -
C++Primer学习笔记第十五章(15/18)类 面向对象编程
<br />面向对象<br />面向对象的三个基本概念是继承,多态,动态绑定。<br /> <br />protected成员<br />1像 private 成员一样,protected 成员不能被类的用户访问。<br />2像 public 成员一样,protected 成员可被该类的派生类访问。<br />3派生类只能通过派生类对象访问其基类的 protected 成员,派生类对其基类类型对象的 protected 成员没有特殊访问权限。<br /> <br />名字查找与集成<br />函数调用遵循原创 2010-10-28 21:16:00 · 689 阅读 · 0 评论 -
比较StreamReader的read()与FileStream的read()
1.StreamReader的read()StreamReader的read()把Stream读入到char[]中。public override int Read(char[] buffer,int index,int count)buffer Type: System.Char[] When this method returns, contains the specified character array with the values between index and (index + coun原创 2011-01-21 16:48:00 · 7526 阅读 · 0 评论 -
C#中的string和String有区别否?
没有区别。用官方博客的话来说,String是大名,string是小名。system.String是.net的框架中的一部分。在C#中,使用string来简化这个啰嗦的名字。看这里:C# defines a number of aliases for CLR types. They may be used interchangably, and even mixed together, e.g.string x = new System.String(' ', 5);.These are the aliase原创 2011-01-21 08:50:00 · 1048 阅读 · 0 评论 -
关于C#中的StreamReader与FileStream这两个类
<br />□简介StreamReader<br />以Stream为服务中心。那么这个stream一定是文件的stream么?不一定,可能是文件的,也可能是其它的,比如从HttpWebResponse转化而来的Stream。<br />构造函数的两大类<br />1从stream中读取<br />StreamReader(Stream) Initializes a new instance of the StreamReader class for the specified stream.<br />2原创 2011-01-21 16:49:00 · 7206 阅读 · 0 评论 -
缓冲区buffer,字节数组 bytep[] arraysample与内存流memory stream
<br /> 1 buffer缓冲区<br />The word Buffer itself says that it works on direct Memory. In .NET, it is basically a manipulation of unmanaged memory represented as arrays of bytes.<br />要点1: 缓冲区是内存的一部分<br />要点2: 在程序中可以表示为字节数组。<br /> <br />2字节数组 byte[ ] arraySa原创 2011-01-25 09:34:00 · 2553 阅读 · 0 评论 -
正则表达式中的贪婪匹配(C#)
正则表达式的引擎是贪婪,只要模式允许,它将匹配尽可能多的字符。如何匹配满足条件的最短字符?通过在“重复描述字符”(如*,如+)后面添加“?”,可以将匹配模式改成非贪婪。示例:string textString="an islander is always living in an island "Regex regexString = new Regex(".+", RegexOptions.Multiline);Regex regexStringNonGreedy = new Regex(原创 2011-01-25 12:56:00 · 5116 阅读 · 0 评论 -
字符串数组与字符串的转化(C++与Java)
做了个小练习,进行C++中char[]与string的转化,以及java中char[]与String的转化。1. C++中char[]与string的转化// StringConvertChar.cpp : Defines the entry point for the console application.#include "stdafx.h"#include #原创 2011-06-08 23:15:00 · 3460 阅读 · 0 评论 -
屏蔽掉warning 4786
最近写vector和map相关的程序时,经常遇到编译无错误但是有警告的情况。警告中总是含有一个数字 warning 4786。原因:不是STL的问题也不是coder的问题,而是VC的一个bug。VC认为,C/C++中的标示符应该小于256字节。如果大于等于这个长度,那么vc就会认为长度太长了,该给出警告了。但是实际上,STL中很容易出现大于256字节的标识符,这并不是错误。解决:办法有很多原创 2011-06-19 14:48:00 · 3434 阅读 · 2 评论 -
指向字符串的指针在printf与cout中的表现比较
直接打印一个指向字符串的指针一定结果是指针的地址吗?还是这个字符串本身?答案是“看情况”。char *m1 = "coconut is lovely";char *m2 = "passion fruit isnice";char *m3 = "craneberry i原创 2011-09-24 19:58:19 · 3415 阅读 · 0 评论 -
字符数组和字符串
转载自劝学网,http://www.quanxue.cn/JC_CLanguage/CLang/Clang10.html,有微改。一、字符数组和字符串的重定义字符数组就是字符串吗?有人说是,因为书上这么写,教师也这么教的。小雅不敢说书上或教师们错了,但至少可以说许转载 2011-09-24 21:27:25 · 1432 阅读 · 0 评论 -
整型提升(integral promotions)
又看了看C++ Primer,整型提升的原则是"最大限度保持精度"。例1int ival = 0;ival = 3.541 + 3首先3.541+3.000(以最大的精度为标准)然后6.541(求和)最后6(赋值)例2void main(){原创 2011-09-24 21:57:50 · 1504 阅读 · 1 评论 -
已知二叉树的中序遍历和后序遍历,如何求前序遍历
上文在已知二叉树的前序遍历和中序遍历的情况下,求出了后序遍历。那么,对称地,如果已知二叉树的后序遍历和中序遍历,如何求前序遍历呢?其实思路与上文完全类似。代码如下:// InPost2Pre.cpp : Defines the entry point for原创 2011-09-24 17:35:03 · 2904 阅读 · 0 评论 -
单链表要点总结
一、单链表创建时的3个指针head, p, qhead指向链表的第一个节点。q指向链表的最后一个节点。p当运输工,指向一个待插入的节点(要用newListNode申请空间),然后将插入至q之后。 二、单链表插入时的4个指针Head, r, q, pNode原创 2011-10-04 09:31:51 · 1375 阅读 · 0 评论 -
C++的函数strtok()中的NULL是什么意思?
strtok()这是一个让人很迷惑的函数。在MSDN中查到它的用法,如下:// crt_strtok.c// compile with: /W3// In this program, a loop uses strtok// to print all the tokens (原创 2011-06-04 00:28:00 · 12222 阅读 · 0 评论 -
指针与指针型的引用
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a; int&ra=a; //定义引用ra,它是变量a的引用,即别名 【例2】引用型的指针链表创建时,有这样一段操作去建立头指针。void setnull(Node *&p)原创 2012-04-20 12:16:54 · 3809 阅读 · 2 评论 -
位运算中的异或运算
位运算是非常迅速的,因为它直接对内存中的二进制数据进行操作。 按位运算除了,按位与,按位非,按位左移,按位右移,还有按位异或。按位异或运算定义,1 ^ 1=01 ^ 0=10 ^ 1=10 ^ 0=0异或,就是“看看你们到底一样不一样。不一样就为1,一样就为0。” 按位异或运算的规律是定理一a ^ b = b ^ a定理二 a ^ b ^ c =原创 2011-10-03 16:24:58 · 23844 阅读 · 2 评论 -
kwstyle中的编码规范
阅读了kwstyle编码规范,选记一些重点规则。IVR : ivars should match regular expression:(^[a-z0-9_]+_$)|(^_[a-z0-9_])SEM : Semicolons = 0 max spaces EOF : The file should have only one new line TAB : The file s原创 2012-05-04 14:50:51 · 1144 阅读 · 0 评论 -
用struct tm与time_t来计算日期之间的间隔天数
使用标准库提供的struct tm类型的变量与time_t类型的变量,可以比较方便地处理时间。写了个处理时间的class。用到了下面的struct tm结构体和time_t类型的变量。 1. struct tm在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:#ifndef_TM_DEFINEDstructtm {int t原创 2012-06-11 20:09:42 · 9654 阅读 · 0 评论