c++ primer 笔记汇总 第三章 标准库类型
1.抽象数据类型:之所以说这些标准库类型是更高级的,是因为其中反映了更复杂的概念,之所以说是抽象的,是因为我们在使用时不需要关心他们是如何表示的,只需要知道这些抽象数据类型支持哪些操作就可以了。
2.string类型支持长度可变的字符串,vector可用于保存一组指定类型的对象。bitset可以把某个值当作位的集合来处理。
3.“::”是作用域操作符,含义是右操作数的名字可以在左操作数的作用域中找到。如:std:cout;
4.构造函数定义如何初始化该类型的对象。
5.几种初始化string对象的方式:
1.string s1; 默认构造函数,s1为空串
2.string s2(s1) 将s2初始化为s1的一个副本
3.string s3(“value”) 将s3初始化为一个字符串字面值副本
4.string s4(n,’c’) 将s4初始化为字符’c’的n个副本
6.string类型的输入操作:1.读取并忽略开头所有的空白字符(如空格,换行符,制表符)2.读取字符直至再次遇到空白字符,读取终止。
7.输入未知数目的string对象:while(cin>>word),中之条件为到达文件尾或遇到无效输入。
8.利用getline读取整行文本,getline并不忽略开头的换行符。格式:getline(cin,line).youyu getline函数返回时丢弃换行符,换行符将不会存储在string对象中。
9.string的集中常见操作:s.empty() 判断字符串s是否为空,为空则返回true
s.size() 返回s中的字符的个数
s[n] 返回字符s中位置为n的字符,位置从0开始计数
s1+s2,s1=s2, 字符串的运算,连接和替换。
v1==v2,!=,<,><,<=,>= 字符串的比较
10.判断字符串是否为空的方法:if(s.size()==0)
11.size操作返回的是string::size_type类型的值。任何存储string的size操作结果的变量必须为string:size_type类型,特别重要的是,不要把size的返回值赋给一个int变量(避免溢出)
12.string对象比较操作时区分大小写的,任何一个大写字母都小于任意的小写字母。
13.字符串的赋值过程:s1=s2,首先释放s1所占的相关内存,然后分配给s1足够存放s2副本的内存空间,最后把s2的所有字符赋值到新分配的内存空间。
14.当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string.如string s1 = “hello” +“,”就非法。
15.可以用下标操作符分别取出string对象中的每个字符,如:for(string:size_type ix=0;ix!=str.size();++ix) cout<<str[ix]
16.可以利用下标操作符来对string中的每个字符进行赋值。
17.在string对象中,利用cctype头文件来测试某个字符是否为特殊字符。
18.vector是同一种类型的对象的集合,每个对象都有一个对应的证书索引值。
19.声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以vector为例,必须说明vector保存和中对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型,如vector<int> ivec;
20.vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。
21.几种初始化vector对象的方式:
vector<T> v1; vector保存类型为T的对象,默认构造函数,v1为空。
vector<T> v2(v1); v2是v1的一个副本
vector<T> v3(n,i); v3包含n个值为i的元素
vector<T> v4(n); v4含有值初始化的元素的n个副本
22.当把一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应元素的副本,但这两个vector对象必须保存同一种元素类型。
23.vector对象的操作:
v.empty(), 如果v为空,则返回true
v.size(),v. 返回v中元素的个数
v.push_back(t) 在v的末尾增加一个值为t的元素
v[n] 返回v中位置为n的元素
24.向vector中添加元素:v.push_back(word)
25.在vector中不能通过下标操作来添加元素。可赋值为0
26.缓冲区溢出指对不存在的元素进行下标操作的结果。
27.迭代器是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定地址。
28. 每种容器都定义了一对名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向第一个元素,由end操作返回的迭代器指向vector的“末端元素的下一个”,通常称为超过末端迭代器,表明它指向了一个不存在的元素,如果vector为空,begin返回的迭代器与end返回的迭代器其相同。
29.由end操作返回的迭代器并不指向vector中任何实际元素,相反,它只是起一个哨兵的作用,表明我们已经处理完vector中所有元素。
30.迭代器类型可使用解引用操作符来访问迭代器所指向的元素,假设iter指向vetor对象ivec的第一个元素,那么*iter和ivec[0]指向同一元素。
31.要使用bitset类就必须包含相关的头文件,即:#include<bitset> using std::bitset
32.定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值,如bitset<32> bitvec;
33.初始化bitset对象的方法:
bitset <n> b; b有n位,每位都为0
bitset <n> b(u); b是unsigned long型u的一个副本
bitset <n> b(s); b是string对象s中含有的位串的副本
bitset <n> b(s,pos,n); b是s从位置pos开始的n个位的副本
33.当用string对象初始化bitset对象时,string对象直接表示为位模式,从string对象读入位集的顺序是从右往左。