计算机巨著:www.shubulo.com .
C++Primer 配套网站: http://www.awprofessional.com/cpp_primer
关于 Microsoft Visual Studio 2012 :
You can choose to use a different collection of setting at any time. From the
Tools menu, choose Import and Export Setting and then choose Reset all setting.
#pragma once 行指明编译器只包含该文件一次。
头文件那些事:
#include包含了关于时间一些操作。
#include包含了关于字符的操作:
#include 该头文件装配了布局(placement)new 分配函数,它允许带参数,指定分配的位置:
关于(placement)new 需要注意的是:首先,他不管 buffer 是否被占用,只是依据所给的地址参数分
配所需空间,所以这会覆盖原有的内容,其次,他不需要使用 delete 来释放空间。
头文件中还定义了 bad_alloc 异常类型,用于处理 new 操作符分配失败的异常。
#include定义了最常见异常类,类名就是 exception,这个类只知道异常的产生,而不
注意:vector 的对象是连续存储的,这点使得其可以用下标访问。
关于容器的标准访问方式——迭代器(一组可用来遍历容器并访问容器内的值的操作):
迭代器是一种通用化的遍历操作,每一种容器都定义了自己的迭代器,所以 C++更推荐用迭代器进行访问
而不是下标,这样对于不能用下标访问的容器任然适用。
vector ::iterator iter = ivec.begin();时通常的迭代器声明并初始化。
vector const_iterator iter ;相当于指向常量的指针,即不可改变所指的值,但指针可变;
与 const vector iterator iter=ivec.begin();不同,这种是 iter 是不能改变的。
在容器中,*操作符叫做解引用操作符,*iter 获取 iter 所指的对象的值,同时++iter 也是可行的。
基本上所有算术操作对迭代器都是适用的,甚至于下是都是可行的:
它指向了两个迭代器中间的元素。
同时 vector::difference_type = iter1-iter2;的结果是 signed 的。
数组与 vector 的联系:
#include
7、命名规则中前缀有:n(整型)、p(指针)、b(布尔)、c(字符)、str 或 sz(字符串)等。
8、climit 中的符号常量:
附:c++中 int st(45)将 st 初始化为 45.
符号
CHAR_BIT
CHAR_MAX
CHAR_MIN
SCHAR_MAX
SCHAR_MIN
UCHAR_MAX
SHRT_MAX
SHRT_MIN
USHRT_MAX
INT_MAX
INT_MIN
UNIT_MAX
LONG_MAX
LONG_MIN
ULONG_MAX
9、十进制、十六进制和八进制:
//十进制;
int chest=42;
int waist=ox42; //十六进制;
int inseam=o42; //八进制;
cout<
11、技巧:
cout<<”please enter your code:___________\b\b\b\b\b\b\b\b\b\b\b\n”;
\b 表示退格,在打印了下划线后退到第一个下划线的位置。
12、通用字符(universe char code)以\u 或\U 开头(两者略有不同)。
13、默认情况下 char 既不代表 signed 也不代表 unsigned 所以可以用来指示 ASCII 码,如有特别需
要才指明 signed 或 unsigned。
14、wcha_t 用于支持长字符型,如:Unicode 和 ISO 10446,相应的有 wcout 和 wcin;当然这只在
有的系统中才支持。
15、不熟悉的类型 long long 和 long double。前者 64 位整数后者 80 或 10 位浮点数;可以从 cfloat
中查找后者的限制,前者则在 climit 中。
16、字符串:
首先:*“soioisjf”和”shiojfoofpo”[2]都是允许的。
cout.put(‘’)打印一个字符;
cin.getline(“address”,length);输入一个字符串,且读取并丢弃换行符。
cin.get(“address”,lenght); 与 getline 功 能 基 本 相 同 , 只 是 他 并 不 提 取 换 行 符 , 所 以 需 要
cin.get()直接提取本行换行符后才能提取下一行的内容。
两者都是见到换行符“\n”就结束不管是否达到长度 length。
cin.get(“address01”,lenght01);
cin.get();
cin.get(“address02”,length02);
与
cin.getline(“address01”,length01);
cin.getline(“adddress02”,length02);
等价。
还可以有:cin.get(“address”,lenght).get()等价于 cin.getline(“address”,length);
cin.getline(“address01”,lenght01).getline(“address02”,length02)也是可以的。
string 类中+运算符与 strcat()的功能相似,且不用考虑长度越界问题。
getline(cin,str)是可行的,可和 setbuf(stdin,NULL)进行类比。
17、结构体中的位字段:
struct member_bit
{
unsigned int a:4;
unsigned int b:4
bool c:1;
bool d:1;
//4 bit
//4 bit
//1 bit
//1 bit
};
总共占用了连续的 10bit 的的空间。
18、匿名共用体(union)
19、枚举类型
enum bit {one=1,two=2,four=4,eigth=8,zero=0,null=0,bigstep=101};
说明:
可重复,如:zero=null=0;
上界的确定为 2^n-1,且满足 2^n>(max(bit)=101)的最小 n 值即:n=7;所以上界为 127
下界是:如果不小于 0 则下界为 0,否者,假设最小值为-6,则取 2^n>|-6|=6 则 n=3,下界为:-
(2^n-1)=-7;
在界限范围内的值都是有效的,如 bit mybit=bit(115);是可以的,尽管 115 并没有定义。
20、逗号(,)操作符花絮:
对于 i=20,j=2*i;该表达式给出的是第二部分的结果,例如:
cata=(i=20,j=2*i);则 cata=40;
但是:cata=17,240;中 240 是无效的,即:cata=17;
21、文件尾 EOF 的模拟(键盘输入模拟):
Windows xp 中使用 ctrl+Z 进行模拟;
其他系统可能使用 ctrl+D 模拟;