笔记
3.1 命名空间的using声明
using std::cout、using std::cin、using std::endl。头文件不应该包含using声明,
3.2 标准库类型 string
标准库string表示可变长的字符序列;
拷贝初始化:使用 = 号,直接初始化:不使用 = 号;
初始化string对象的方式 | |
string s1 | 默认初始化,s1是一个空串 |
string s2(s1) | s2是s1的副本 |
string s2 = s1 | 等价于string s2(s1),s2是s1的副本 |
string s3("value") | s3是字面值“value”的副本,除了字面值最后的那个空字符 |
string s3 = "value" | 等价于string s3("value"),s3是字面值“value”的副本 |
string s4(n, 'c') | 把s4初始化为由连续n个字符c组成的串 |
string 的操作 | |
os << s | 将s写到输出流 os 当中,返回 os |
is << s | 从 is 中取字符串赋值给 s,字符串以空白分隔,返回 is |
getline(is, s) | 从is中读取一行赋值给s,返回is |
s.empty() | s为空返回true ,否则返回false |
s.size() | 返回s中的字符个数 |
s[n] | 返回s中第n个字符的引用,位置n从0开始计起 |
s1 + s2 | 返回s1和s2连接后的结果 |
s1 = s2 | 用s2的副本 代替原来s1中的字符串 |
s1 == s2 | 如果s1 和s2中所含的字符完全一样,则他们相等返回true,否则不相等 返回false 对大小写敏感 |
s1 != s2 | 如果s1 和s2中所含的字符不一样,则返回true,否则 返回false 对大小写敏感 |
<,<=, >,>= | 利用字符在字典中的顺序进行比较,且对大小写敏感 |
触发getline函数返回的那个换行符实际上被丢弃了,得到的string对象中并不包含该换行符。
size()函数返回的是一个string::size_type类型,如果一条表达式中已经有了size()函数就不要在使用int了,这样可以避免混用int和unsigned可能带来的问题。
字符串字面值与string是不同的类型。当把string 对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+) 的两侧的运算对象至少有一个是string,不能将字面值直接相加。
cctype 头文件中的函数 | |
isalnum(c) | 当c是字母或数字时为真 |
isalpha(c) | 当c是字母时为真 |
iscntrl(c) | 当c是控制字符时为真 |
isdigit(c) | 当c是数字时为真 |
isgraph(c) | 当c不是空格但可以打印时为真 |
islower(c) | 当c是小写字母时为真 |
isprint(c) | 当c是可打印时为真 |
ispunct(c) |
当c是标点符号时为真 |
isspace(c) | 当c是空白时为真 |
isupper(c) | 当c是大写字母时为真 |
isxdigit(c) | 当c是十六进制数字时为真 |
tolower(c) | 当c是大写字母,输出对应的小写字母,否则原样输出 |
toupper(c) | 当c是小写字母,输出对应的大写字母,否则原样输出 |
建议:使用C++版本的c 标准库头文件,一般来说, C++程序应该使用名为cname 的头文件而不使用name.h 的形式, 标准
库中的名字总能在命名空间std中找到。
punct_cnt 的类型和s.size的返回类型一样,都是std::size_type。
如果想要改变string 对象中字符的值,必须把循环变量定义成引用类型。
C++语言规定只有当左侧运算对象为真时才会检查右侧运算对象的情况。
3.3 标准库类型vector
vector是一个模板。
vector表示对象的集合,引用不是对象,所以不存在包含引用的vector。
vector通过花括号还是圆括号来区分列表初始值和元素数量,圆括号是元素数量,花括号是列表初始值。
如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环。
3.4 迭代器介绍
但凡是使用了迭代器的循环体,都不要向迭代器所属的容器中添加元素。
使用迭代器运算的一个经典算法是二分搜索。
没有定义两个迭代器之间的相加操作。
3.5 数组
字符数组可以用字符串字面值进行初始化,但是后面要加上一个空字符,因此此时要注意数字的维度的大小。
不允许使用数组来初始化另一个内置类型的数组,但是可以用数组为vector对象赋值。
3.6 多维数组
要使用范围for循环语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型,