第三章
在头文件中应该使用完全限定的标准库名字,如std::cout<<std:endl;。而不应该使用usingstd::cout;或usingnamespacesstd;在头文件中放置using声明,就相当于在包含该头文件的每个程序中都放置了同一using声明。应该在头文件中包含确实需要的东西,遵守最小权原则。
string是定义在std名字空间的名字。
getline用于读取整行文本,遇到换行符停止,但不包括换行符。
string成员函数size()返回的是string::size_type类型。它被称为配套类型(companiontype)通过这些配套类型可以实现库类型的使用与机器无关(machineindependent)。它被定义为与unsigned有相同的含义,可以保证足够大,能够存储任意长度的string对象。因此任何存储string的size()返回结果的变量必须为string::size_type类型,注意不要把size的返回结果赋给int类型的变量。因为在有些机器上int类型表示范围很小,如16位的int类型的变量最大只能表示32767个字符。使用size_type时最安全的方法。
stringst1=,st2="abcdefg";
st1=st2;
注意此处将一字符串直接赋值给st2,调用的是复制构造函数,且单参构造函数执行了隐式转换。
将string类型的对象与字符串进行混合操作时,如strings1("abc");strings2=s2+"def";+左右操作数必须至少有一个是string类型的。如strings2=s1+"
, "+"!!";之所以可以这样级联操作,是因为它和cout,cin是一样的,s1+","将返回一个新的string对象。Strings3=","+"!!"+s2;这句是错的。因为第一个+运算符两边均是字符串,这是不允许的。
前面提到应该用string::size_type类型的变量接受size的返回值,同样在定义作用string对象的索引变量时最好也用string::size_type类型。
vector是一个类模板,它可以定义任意多种数据类型,但它不是一种数据类型。vector<int>是数据类型。
对于vector保存内置类型的元素,标准库将用0值初始化所有的成员。如vector<int>vec(10);10个int类型的成员初始值均为0;如果保存的是类类型,标准库将调用类的默认构造函数来初始化每一个元素。如果类中定义了构造函数,但没有提供默认构造函数,初始化这种类型的vector对象时,除了提供vector对象所含的元素个数之外,还必须指定每个元素的初始值。
vector的size返回相应的vector定义的size_type的值,但vector::size_type是不正确的,必须指明该类型是在哪里定义的,如vector<int>::size_type;//正确
除了使用下标来访问vector对象元素外,还可以使用迭代器来访问。之所以为所有的标准库容器都定义了相应的迭代器类型,是因为只有少数的容器支持下表操作。迭代器是通用化的方法。
每种容器都定义了自己的迭代器类型,如vector<int>::iteratoriter;begin()返回vector的开始元素,end()返回vector末端元素的下一个,它不指向任何元素。通常被称为超出末端。若vector为空begin()和end()返回的迭代器相同。
for(vector<int>::iteratoriter=vec.begin();iter!=vec.end();iter++);
对于此句判断iter是否指向vector容器的末尾,使用的是!=符号,而不是常使用的<符号。iter++,是iter指向容器中的下一个元素,这与指针类似。另外之所以每次判断是都调用end(),而不在循环开始之前就获得,是因为循环内可能会增加或删除容器的元素,一旦发生此情况迭代器就会失效,很可能导致死循环。
const_interator与interator类似,只是它无法改变引用的元素的值,仅仅能读取。注意constvector<int>::iterator,此迭代器无法通过自增自减改变指向.仅仅可以改变它指向的元素的值。与constint*constp相联系可以加深理解。
iter2-iter1,两迭代器相减得到两个迭代器之间元素的个数。容器内定义了different_type类型来表示存储此变量的类型。实际就是signed类型。Iter1+num,通过对迭代器增加或减少某个值,让迭代器直接指向某个元素。如vector<int>::iteratoriter=vec.begin()+vec.size()/2;直接访问中间的元素。
再啰嗦一句:任何改变vector长度的操作都会使已存在的迭代器失效,例如在push_back之后就不能在依赖指向vector的迭代器的值了。
分享到:
相关推荐
C++ primer plus 第五版的个人学习笔记,仅供大家学习参考。
C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。
C++ Primer 中文版(第四版)学习笔记~ C++ Primer 中文版(第四版)学习笔记~
C++primer第五版第二章习题答案.pdf
c++primer第五版中文版课后答案(第12章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚
C++primer的笔记,可以看一下,一些容易犯错的陷阱
《C++ Primer Plus第6版中文版》学习笔记(第十章) 红字内容是有疑问或者没把握的。 绿字部分是比较重要,或者经过确认的
C++_Primer_中文版的学习笔记,C++_Primer全面介绍了 C++ 语言。作为一本入门书(Primer),它以教程的形式对 C++ 语言进行清晰的讲解,并辅以丰富的示例和各种学习辅助手段。
c++primer第五版中文版课后答案(第17章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚
c++primer第五版中文版课后答案(第18章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚
C++Primer第五版习题答案+详解(完整版) C++Primer第五版习题答案+详解(完整版)
牛人的c++primer学习笔记,c++基础学习必须看的,努力中。
c++ primer第五版第6章答案
C++Primer 第四版课后习题解答(第1~18章完整答案)完整版 非扫描高清
《C++ Primer》第五版中文版学习笔记,适合完整看过原书一遍以上的人员复习与查阅使用。对于基础较好的,也可直接适用。
c++primer学习心得 c++primer学习心得
C++ Primer 第五版(中文版) 第1~11章课后习题答案(附上代码)
锻炼自己的全英文C++ primer第五版电子版,更加适合于有一定代码功底人士阅读,初学者(你要读也很棒棒)阅读难度较大。
C++ Primer第五版 高清扫描pdf,压缩版,下载后解压即可
C++ Primer 第四版学习笔记是本人2014年学习C++时的学习笔记,今天分享出来给初学者,让大家学习起来不在枯燥。需要的同学自行下载,大佬请绕道!