【C++ primer】C++ 3.23

初始化;

属性:长度、是否空(一个注意点:size)

两个string间:
1)比较,依靠长度(字母都相同,长的就大)以及首个不同的字母(优先)
2)赋值
3)相加(特殊:其中一个是字面值对象,字面值可以转化为string对象,也就是从左到右相加,加号两边至少有一个是string,否则没办法转化)(字面值和string对象不一样,存储的地方就不一样, string能改,字面值是不能改变的)(string对象也可以与单个字符相加)

一个string:
注意:在访问字符串时,都要判断其是否为空s.empty()
1)遍历
2)通过遍历修改所有字符 (ctype库)
3)通过下标访问单个字符(注意:一个是使用decltype(s.size()))定义索引,好处是定义的类型是无符号数,总会大于零,一个是让下标小于size())
4)通过下标或迭代器访问单个字符修改字符

字符串访问:一个检查空,一个是检查下标超限。

vector:
1)应用场景:vector应用于不知道保存的元素的长度的时候。其相当于列表,可以在后边添加,可以通过下标访问。其是一个容器,可以保存不同种类的元素。
2)初始化:
无参:vector s;
有参:vector s1={“asdf”, “aswe”}//初始化两个元素
vector s1{“asdf”, “aswe”}//与上面的等价
拷贝:vector s2 = s1;//s1副本拷贝
vector s2(s1)//等价上面的
vector s2(10, s1)或者 s2(10, “hi”)等赋值相同的
注意:vector s3(10)这是默认初始化

当然还有一种情况,就是类型不匹配时:
vector s4{10, “hi”}此时就是指10个"hi"

注意花括号和圆括号之间的区别。花括号用于直接初始化,圆括号用于拷贝初始化,但是也可以直接定义数量,进行默认初始化

3)默认功能
vector src;
src.push_back();

是否为空;
长度src.size(),返回的是vector::size_type类型的值,在定义的时候也要如此定义值

4)访问:
可以通过下标访问,但是不能通过下标添加元素,这个要与python区分开。
此外,下标的类型也应该是vector::size_type类型,因此在进行访问时,可以采用decltype(src)定义下表变量

名词:缓冲区溢出(buffer overflow)就是指下标超出界限的问题。

迭代器:
1)迭代器的操作类似于指针在链表中的移动操作。
2)string以及vector都有begin或者end成员函数,将自身返回为一个迭代器,接收的变量类型采用auto,因为不清楚变量的类型;
auto its = s.begin()//it为迭代器,现在指向第一个元素
auto ite = s.end()//it指向最后一个元素的下一个位置,具体作用是
(1)与s.begin()联合起来,看两个是否相等,判断迭代器是否为空;
(2)在遍历迭代器时,可以当作终止条件
3)访问迭代器元素:
通过解引用操作 *it,获得的就是当前迭代器指向的元素本身,可以对元素进行修改。
4)移动迭代器指向元素
its++;就移动到下一个元素了

注意:所有的容器能使用迭代器,因此在遍历的终止条件中都使用==或者!=
5)const与迭代器
迭代器也可以拥有只读属性;
如果是常量容器,返回的是vector::const_iterator 类型的迭代器,只能读取,不能修改;
但是非常量容器,返回的是vector::iterator类型的迭代器,能读取,能修改。
除此之外,对于非常量的,也可以像引用与const结合的案例,使迭代器拥有只读属性,可以使用.cbegin()和.cend()

6)访问迭代器元素的成员函数
迭代器的元素可以是一个对象,此对象有成员函数,因此可以(*it).func(),或者简写 it->func()

7)使用迭代器以容器的限制:
容器:不能再for循环中push_back()新元素,否则会导致终止条件永远不被执行
迭代器:使用迭代器时,不能更改容器的容量,不能使用push_back添加元素,否则就会崩。

8)迭代器的运算
迭代器就像指针一样,可以通过+n向后移动n,-n向前移动n。
指向同一个容器的两个迭代器可以作减法或者比较,减法的结果类型为difference_type。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值