《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器

1.采用预处理功能编写头文件

         在头文件定义(头文件中的内容是只能被定义一次的实体)过程中,为了防止头文件重复包含的情况,采用预处理器的一个头文件保护符功能,格式为:{  #ifndef 预处理变量(通常大写)         #define  预处理变量     #endif },多使用预处理的功能可以增强代码的鲁棒性和移植能力,但是增加了代码的理解能力。

         预处理变量无视C++语言中的作用域规则,它是在程序预处理阶段将程序中的所有预处理变量用实际的变量来进行替代。另外如果使用上述格式的预处理功能定义了预处理变量,则后面的程序中如果遇到预处理变量,则可以避免重复定义。

2.string初始化和字符操作

          string是C++语言中定义的一种复杂数据类型(可变长字符串),它的初始化方式可以分为两种,一种是利用“=”操作的拷贝初始化,另外一种是利用构造函数完成直接初始化。

          拷贝初始化方式:string s2=s1;  string s3="value"(拷贝字符串除最后一个字符的所有字符给字符串s3);’

          直接初始化:string s4(s2),  string s5("value"),  string s6(n,'c');

          string提供一个size函数,返回string对象的大小,它的数据类型为一个string::size_type,为一个用typedef定义的变量。

          标准库允许将string对象和string对象或string对象和字面值常量进行运算(字面值常量可以转换为string对象),但是不允许加号两边都是字面值常量。

          C++11提供一种范围for语句来对string对象中的每一个字符才做,结合cctype(兼容C中的ctype.h文件,C++继承C中的文件只是将C中的头文件删去.h后缀,同时在前面添加一个c)中的字符处理和判断函数,就能完成对string对象中的字符处理。使用for循环修改string对象,需要定义字符引用。cctype中的处理字符的函数:

          isalnum(c):c是字母或者数字为真;                                 islower(c):c为小写为真;

          isalpha(c):c是字母为真;                                                isupper(c):c为大写为真;

          isdigit(c):c是数字为真;                                                  tolower(c):c为大写时转小写,否则不变;                                  

          ispunct(c):c是标点符号为真;                                         toupper(c):c为小写时转大写,否则不变;

          isspace(c):c是空格为真;

          string支持[ ]操作符,可以使用[ ]访问string中的任意字符,但是必须保证其中的数值在0~string.size()之间,否则会产生数据越界的现象。

3.vector初始化和迭代器

          vector是C++语言定义的一个类模板,而不是一种类型,是一个可变长的向量。vector的初始化方式有三种:拷贝初始化,直接初始化和初始化列表的方式。拷贝初始化通常与赋值与赋值运算符“=”有关,如vector<int> v2=v1,直接初始化是采用初始化函数,如vector<int> v3(n,val);vector<int> v4(v3);vector<int> v5(n),初始化列表是采用花括号的方式,如vector<int> v6{1,3,5}或vector<int> v7={1,3,5};

          如果vector的初始化中只提供容器中元素的数量,不提供初始值,则容器中的初始值会执行默认的初始化。如果没有默认的初始化值,则容器创建失败。如果在使用花括号列表初始化容器时,但是花括号中的值不能用来列表初始化,则考虑用这样的值来构造vector对象,如vector<string> v8{10,"hi"}(v8中有10个“hi”的字符串)

          vector中定义了一个size函数来定义容器中元素的个数,数据类型为vector<int>::size_type.vector可以使用下标来访问已存在的对象,但不能利用下标来添加对象(可以采用范围for语句来确定下标是否合法)。

          vector中定义了一种begin和end两种迭代器,迭代器的类型为vector<int>::iterator.C++11中增加了两个迭代器cbegin和cend,对应的迭代器类型为vector<int>::const_iterator.

          对于vector中定义的迭代器,如果期间vector中的值发生增加或者减少,则所定义的迭代失效。vector和string支持迭代器加减运算,迭代器加减一个整形得到的仍为一个迭代器(注意不能越界,begin,end),两个迭代器相减,得到一个名字为difference_type的有符号整形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值