C++数据类型
newline( 换行符) \n
horizontal tab( 水平制表键) \t
vertical tab( 垂直制表键) \v
backspace( 退格键) \b
carriage return (回车键) \r
formfeed ( 进纸键) \f
alert (beel) (响铃符) \a
backslash (反斜杠键) \\
question mark ( 问号) \?
single quote (单引号) \'
double quote (双引号) \"
1. 转义序列格式:\ooo ,ooo 代表三个八进制数字组成的序列
2. 宽字符文字(类型为wchar_t):字符文字前面可以加“L”,例如:L'a' 。宽字符常量用来支持某些语言的字符集合。
3. 空字符是C 和C++ 用来标记字符串结束的符号(NULL)。在一行的最后加上一个反斜杠表明字符串文字在下一行继续。宽字符串文字的类型是常量宽字符的数组,它也有一个等价的宽空字符作为结束标志。如果两个字符串或宽字符串在程序中相邻。
4. 变量名定义:对象名一般用小写字母;标识符一般使用助记的名字——即可;对于多个词构成的标识符习惯上一般在每个词之间加一个下划线或内嵌的每个词第一个字母大写。
5. 如果一个变量是在全局域global scope 内定义的那么系统会保证给它提供初始值0,如果变量是在局部域local scope 内定义的或是通过new 表达式动态分配的,则系统不会向它 提供初始值0 。
6. 指针的典型用法是构建一个链接的数据结构,例如树tree 和链表list 。并管理在程序执行过程中动态分配的对象以及作为函数参数类型,主要用来传递数组或大型的类对象。
7. 空 void* 类型指针它可以被任何数据指针类型的地址值赋值函数指针不能赋值给它。
8. 字符串 (1)#include
(2)string 类型 1.支持用字符序列或第二个字符串对象来初始化一个字符串对象.string st3( st );st来初始化st3;st2 = st3;// 把st3 拷贝到st2 中。
2. 支持字符串之间的拷贝.
3.支持读写访问单个字符.
4.支持两个字符串的相等比较
5.支持两个字符串的连接,加操作符+ 或看起来有点怪异的复合赋值操作符+= 将两个或多个字符串连 接起来。
6.支持对字符串长度的查询, st 的长度由size()操作返回不包含终止空字符. st.size()
7.支持字符串是否为空的判断,查询st.size()或者st.empty()为真为空
#include
string st( "The expense of spirit\n" );
将一个C 风格的字符串赋给一个string 对象,反之不成立。
9. const限定修饰符:它把一个对象转换成一个常量(constant).
const double *pc = 0; pc可修改,*pc不可修改
int *const cur = &errNumb; *cur可修改,cur不可修改
10. 引用
每个引用的定义必须以取地址操作符开始。
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名; 说明:(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
(6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的集合。但是可以建立数组的引用.
const 引用可以用不同类型的对象初始化只要能从一种类型转换到另一种类型即可,也可以是不可寻址的值。
11.布尔类型
当表达式需要一个算术值时布尔对象( 如found)和布尔文字都被隐式地提升成 int(正如下面的例子) false变成0 而true 变成1。
12.枚举
enum open_modes{ input = 1, output, append };
我们还可以声明枚举类型对象,open_modes om = input; 并用om 代替一个枚举成员。我们不能做到的是打印枚举成员的实际枚举名,一种解决方案是定义一个由枚举成员的值索引的字符串数组cout << open_modes_table[ input ] << " " << open_modes_table[ om ] << endl; 我们不能使用枚举成员进行迭代。
13.数组
非const 的变量不能被用来指定数组的维数。
14.vector容器类型
头文件#include
vector< int > ivec( 10 );
vector< int > ivec( 10, -1 ); //初始化为-1
vector< int > ivec( ia, ia+6 ); // 把ia的6 个元素拷贝到ivec 中
vector< int > ivec( &ia[ 2 ], &ia[ 5 ] ); // 拷贝3 个元素ia[2], ia[3], ia[4]
vector< string > user_names( svec ); // 用另一个vector 初始化一个vector
svec = user_names; // 把一个vector 拷贝给另一个vector
标准模板库中vector用法:定 义一个空vector, vector< string > text; 我们向vector 中插入元素而不再是索引元素以及向元素赋值,push_back()操作就是在vector 的后面插入一个元素。任何一个插入操作都将增加vector 的大小而不是覆盖掉某个现有的元素。
15.复数类型
#include
complex< double > purei( 0, 7 ) // 纯虚数0 + 7i
complex< float > real_num( 3 ); // 虚数部分缺省为0 3 + 0i
complex< long double > zero; // 实部和虚部均缺省为0 0 + 0i
complex< double > purei2( purei ); // 用另一个复数对象来初始化一个复数对象
complex< double > conjugate[ 2 ] = {
complex< double >( 2, 3 ),
complex< double >( 2, -3 )
}; //复数对象有float double或long double 几种表示
complex< double > *ptr = &conjugate[0]; //声明指针
complex< double > &ref = *ptr; //声明引用
16.volatile :编译器执行的某些例行优化行为不能应用在已指定为volatile的对象上
17.pair类型:得我们可以在单个对象内部把相同类型或不同类型的两个值关联起来
pair< string, string > author( "James", "Joyce" );
创建了一个pair 对象author ,它包含两个字符串分别被初始化为James 和Joyce ,我们可以用成员访问符号访问pair 中的单个元素它们的名
字为first 和second 。例如
string firstBook;
if ( author.first == "James" &&
author.second == "Joyce" )
firstBook = "Stephen Hero";
如果我们希望定义大量相同pair 类型的对象那么最方便的做法就是用typedef:
typedef pair< string, EntrySlot* > SymbolEntry; 一个元素持有对象的名字另一个元素持有指向其符号表入口的指针。
18.类类型
表达式
1.bitset:头文件#include
声明bitset:缺省定义bitset< 32 > bitvec; 声明了一个含有32个位的bitset 对象bitvec。
string bitval( "1010" ); bitset< 32 > bitvec4( bitval );
string bitval( "1111110101100011010101" );bitset< 32 > bitvec5( bitval, 6, 4 ); // 从位置6 开始, 长度为4: 1010
string bitval( "1111110101100011010101" ); bitset< 32 > bitvec6( bitval, 6 ); // 从位置6 开始直到字符串结束: 1010101
将任意bitset 对象转换成string 表示,用to_string() 操作,string bitval( bitvec3.to_string() );
将任意bitset 对象转换成unsigned long型的整数表示,用to_ulong() 操作。
bitset支持向量位或操作与与操作。
操作 功能 用法
test( pos ) pos位是否为1 a.test( 4 )
any() 任意位是否为1 a.any()
none() 是否没有位为1 a.none()
count() 值是1 的位的个数 a.count()
size() 位元素的个数 a.size() [pos] 访问pos 位 a[ 4 ]
flip() 翻转所有的位 a.flip() flip( pos ) 翻转pos 位 a.flip( 4 )
set() 将所有位置1 a.set()
set( pos ) 将pos 位置1 a.set( 4 )
reset() 将所有位置0 a.reset()
reset(pos) 将pos 位置0 a.reset( 4 )
2.栈操作 iStack 类 #include
语句
1.声明语句一般它可以被放在程序中任何允许语句出现的地方。
// 一条声明语句, 两个对象定义
vector
iend = text.end();