《C++ Primer》C++基础 第三章 字符串、向量和数组

文章目录

  • 3.1 命名空间
  • 3.2 string
  • 3.3 vector
  • 3.4 迭代器介绍
  • 3.5 数组
  • 3.6 多维数组

3.1 命名空间

3.2 string

操作 说明
getline(is, s) 读取整行
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中的字符完全相同,则它们相等;对字母大小写敏感
<,<=,>,>= 利用字符在字典中的顺序进行比较
基于范围的for语句 遍历给定序列中的每个元素,并对序列中的每个值执行某种操作
s.c_str() 返回一个以空字符结束的字符数组,这个数组所存的数据与s相同

1、在执行读取操作时,string会从第一个真正的字符开始,直到遇见下一处空白
2、size函数返回的是一个无符号整型数,应避免混用带符号数和无符号数。
3、关系运算符:
①如果两个string对象的长度不同,而较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象;
②如果两个string对象在某些对应的位置上不一样,则string对象比较的结果其实是string对象中第一对相异字符比较的结果

3.3 vector

操作 说明
v.push_back(t) 向vector对象的尾端添加元素
v.empty() 如果v不含任何元素,返回true;否则返回false
v.size() 返回v中元素的个数
v[n] 返回v中第n个元素的应用
v1 = v2 用v2中元素的拷贝替换v1中的元素
v1 = {a,b,c,…} 用列表中元素的拷贝替换v1中的元素
v1 == v2 当且仅当它们的元素数量相同且对应位置的元素值都相同时相等
<,<=,>,>= 以字典顺序进行比较

1、如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环。
2、size函数返回值的类型是由vector定义的size_type类型;要使用size_type,需首先指定它是由哪种类型定义的。vector对象的类型总是包含着元素的类型:vector<int>::size_type
3、vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素。(确保下标合法的一种有效手段就是使用for语句)

3.4 迭代器介绍

操作 说明
*iter 返回迭代器iter所指元素的引用
iter0->mem 解引用iter并获取该元素的名为mem的成员,等价于(*iterm).mem
++iter 令iter指示容器中的下一个元素
–iter 令iter指示容器中的上一个元素
==、!= 判断两个迭代器是否相等(不相等),如果两个迭代器指示的是同一个元素或者它们是同一个容器的尾后迭代器,则相等,反之则不相等
s.begin() 返回指向第一个元素的迭代器
s.end() 返回指向尾元素的下一位置的迭代器
cbegin、cend 类同begin、end,区别:无论vector对象(或string对象)本身是否是常量,返回值都是const_iterator
vector和string迭代器支持的运算
iter + n
iter = n
iter += n
iter -= n
iter1 - iter2
>、>=、<、<=

1、检查string是否为空:通过检查begin和end返回的结果是否一致。
2、因为end返回的迭代器并不实际指示某个元素,所以不能对其进行递增或解引用的操作。
3、凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

3.5 数组

操作 说明
begin函数 返回指向数组首元素的指针
end函数 返回指向数组尾元素下一位置的指针

1、要理解数组声明的含义,最好的办法是从数组的名字开始按照由内向外的顺序阅读。
2、在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向数组首元素的指针。但当使用decltype关键字时上述转换不会发生。
3、指针也是迭代器。

3.6 多维数组

1、要使用范围for语句处理多维数组,除了最外层的循环外,其他所有循环控制变量都应该是引用类型

你可能感兴趣的:(C++,初学)