C++primer学习笔记及作业答案之第三章

本文详细介绍了C++中的命名空间using声明,标准库类型如string和vector的使用,包括拷贝初始化、迭代器介绍以及数组和多维数组的操作。强调了在使用迭代器时的注意事项,并总结了string和vector作为标准库类型的重要性和优势。同时,提供了课后习题的解答,涵盖string、vector、迭代器、数组和多维数组的实践应用。
摘要由CSDN通过智能技术生成

笔记

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循环语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值