知识点:
1.如果使用等号初始化一个变量,为拷贝初始化(copy initialization),否则为直接初始化(direct initialization)
2.string 对字母大小写敏感。
3.读取位置数量的string对象:
int main
{
string word;
while(cin>>word)
cout<<word<<endl;
return 0;
}
4.getline 读取一整行,遇到换行符结束。
5.不能混用int和unsigned。表达式中有size()函数就不要用int了,避免混用。
6.不能把字面值直接相加,+两侧必须要有string。字符串字面值不是string类型
7.使用c++版本的c标准库头文件: 用cname而不是name.h的形式
8.vector是类模板(class template),根据模板创建类或者函数的过程为实例化(instantiation),vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,例如vector<int> 。( )是元素数量,{ }是元素内容。【括号里的类型和vector类型相同情况下。
9.循环体内包含有向vector对象添加元素的语句,则不能使用范围for循环,范围for循环语句体内不应改变其所遍历序列的大小。
10.vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素,确保下标合法的一种手段就是尽可能使用范围for语句。
11. end成员返回的迭代器常被称作尾后迭代器(off-the-end iterator),如果容器为空,begin和end返回同一个迭代器,都是尾后迭代器。不能再范围for循环中向vector对象添加元素。
12.箭头运算符->把解引用和成员访问两个操作结合在一起。
13.凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。
14.数组的维度必须输一个常量表达式。字符串字面值初始化数组,结尾有一个空字符。数组不允许给其他数组拷贝和赋值
15.c++中多维数组其实是数组的数组。对二维数组来说,常把第一个维度成称为行,第二个维度成为列
习题:
Exercise 3.26
In the binary search program on page 112,why did we write
mid=beg+(end-beg)/2;
instead ofmid=(beg+end) /2;
?
There's no operator +
for adding two iterators.