第03章:标准库类型
C++还定义了一个内容丰富的抽象数据类型标准库,
如 : string 大小可变的字符串
vector 大小可变的集合
bitset 提供了抽象方法操作位集合
第一节:命名空间using声明
@ 学习摘录024:
——一旦使用了using声明,我们就可以直接引用名字,而不需要再引用该名字的命名空间:
——using std::cin;
——using std::string;
@ 学习摘录025:
——如果在头文件中放置using声明,就相当于在包含该文件的每个程序中都放置了同一个using声明,不论该程序是否需要using声明。
@ 学习摘录026:
——通常头文件中应该只定义”确实必要的东西”。请养成这个习惯。
摘录有想026:
——书上建议少用using namespace std 这样的风格,以后写程序就尽量用using声明吧,少用using编译指令。
第二节:标准库string类型
@ 学习摘录027:string操作
——s.empty() // 检查字符是否为空,bool类型
——s.size(); // 返回s中字符的个数
——s[n]; // 返回s中位置为n的字符,位置从0开始计数
@ 学习摘录028:
——size操作返回的是string::size_type类型的值。String类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关(machine-independent)。Size_type就是这些配套类型中的一种。它定义为unsigned型(unsigned int 或unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。
摘录有想028:
——写程序时不要把size的返回值赋给一个int变量了。 哦! 哦! 哦!
@ 学习摘录029:
——如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象,而能容纳一个文件内容的string对象轻易就会超过这个数字。因此,为了避免溢出,保存一个string对象size的最安全的方法就是使用标准库类型string::size_type
摘录有想030:
——在比较时需注意大小写了,想起以前cctype有一个用于转换字符的函数,把大写转为小写之类的功能可以很容易实现。
@ 学习摘录031:
——string类型通过下标操作符([])来访问string对象中的单个字符。下标操作符需要一个 "size_type" 类型的值,来标明要访问字符的位置。这个下标中的值通常被称为“下标”或“索引(index)”。
@ 学习摘录032:
——string对象的下标从0开始,而s[s.size() – 1]则表示s的最后一个字符。
第三节:标准库vector类型
@ 学习摘录033:
——虽然可以对给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。
@ 学习摘录034:
——C++程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。
@ 学习摘录035: “注意”
——我们倾向于在每次循环中测试size的当前值,而不是进入循环前,存储size值的副本。调用size成员而不保存它返回的值,这反映了一种良好的编程习惯。
82P 安全的泛型编程 – 小读很好!
第四节:迭代器简介。
@ 学习摘录036:
——迭代器是一种检查容器内元素并遍历元素的数据类型。若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元素并访问这些元素的值),称这种类型为迭代器。
@ 学习摘录037:
——vector<int>::iterator iter = ivec.begin();
——由end操作返回的迭代器指向vector的“末端元素的下一个”,通常称为超出未端迭代器(off-the-end iterator),表明它指向了一个不存在的元素。如果vector为空,begin返回迭代器与end返回的迭代器相同。 哦!
@ 学习摘录038:
——由end操作返回的迭代器并不指向vector中任何实际的元素,相反,它只是起一个“哨兵”(sentinel)的作用,表示我们已经处理完vector中所有的元素。
@ 学习摘录039:
——迭代器类型可以使用解引用操作符(*操作符)来访问迭代器所指向的元素:*iter = 0;由于end返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作。
@ 学习摘录040:
——使用const_iterator类型时,我们可以得到一个迭代器,它自身的值可以改变,但不能用来改变其指向的元素的值。可以对迭代器进行自增以及使用引用操作符来读取值,但不能对该元素值赋值。