C++学习笔记(三)——标准库类型

第三章 、标准库类型

3.1、命名空间的 using 声明

1、在头文件中必须总是使用完全限定的标准库名字。

3.2、标准库 string 类型

1、 字符串字面值与标准库string 类型不是同一类型,初始化 string 对象的方式有以下四种:

string s1;               //默认构造器, s1 为空字符串

string s2(s1);          //将 s2 初始化为 s1 的一个副本

string s3("Value");    //将 s3 初始化为一个字符串字面值副本

string s4(n,'c');      //将 s4 初始化为字符 'c' 的 n 个副本

2、 string类型的输入操作符规则:

    (1)、读取并忽略开头所有的空白字符 ( 如空格、换行符、制表符 ) ;

(2) 、读取字符直至再次遇到空白字符,读取终止。

3、 getline读取整行文本: while(getline(cin,string)) ,不包括换行符。

4、 String对象的操作:

(1) 、s[n] 返回 s 中位置为 n 的字符,位置从 0 开始计数;

(2) 、s1==s2  比较两个字符串的内容 (这与 Java 不同 )

(3) 、empty() size()....

5、 string::size_type类型:

(1) 、string 类型和许多其他库类型都定义了一些配套类型,通过这些配套类型的使用,库类型的使用就能与机器无关;

(2) 成员函数size() 返回的是 size_type 类型

(3) 、任何存储string 的 size 操作结果的变量必须为 string::size_type 类型, 不要把size 的返回结果赋给一个 int 变量

(4) for(string::size_type s = 0; s != string.size(), s++),用 size_type 类型作为其下标的类型 ( 下面介绍的 vector 也是如此 )

6、 string关系操作符 ( 采用和字典排序相同的策略,大小写敏感 ) :

(1) 、如果两个string 对象长度不同,且短的 string 对象与长的 string 对象的前面部分相匹配,则短的 string 对象小于长的 string 对象;

(2) 、如果两个string 对象的字符不同,则比较第一个不匹配的字符。

3.3、标准库 vector 类型

1、 vector不是一种数据类型,而是一个类模板,可以用来定义任意多种数据类型。 Vector 类型的每一种都指定了其保存元素的类型。因此, vector<int> 和 vector<string> 都是数据类型。

2、 Vector对象的初始化方式:

(1) 、vector<T> v1;          //vector 保存类型为 T 的对象, v1 为空

(2) 、vector<T> v2(v1);     //v2 是 v1 的一个副本

(3) 、vector<T> v3(n,i);    //v3 包含 n 个值为 i 的元素

(4) 、vector<T> v4(n);      //v4 含有值初始化的元素的 n 个副本

3、 虽然可以对给定元素个数的vector 对象预先分配内存,但 更有效的方法是先初始化一个空的vector 对象,然后动态地增加元素

4、 Vector对象的操作与 string 的大体相同,只是多了 push_back(value) 的操作,该操作的作用是在末尾添加一个元素。其中 size 操作返回相应 vector 类定义的 size_type 的值, vector类型总是包括 vector 的元素类型 vector<int>::size_type  //正确     vector::size_type    // 错误

5、 必须是已存在的元素才能用下标操作符进行索引 。通过下标操作进行赋值时,不会添加任何元素,即 下标操作不能用来添加元素

3.4、迭代器简介 (iterator ,其工作原理的介绍见第十一章 )

1、 每种容器类型都定义了自己的迭代器类型,如:vector<int>::iterator iter;

2、 每种容器都定义了begin 和 end 的函数, 用于返回迭代器

(1) 、由begin 返回的迭代器指向第一个元素;

(2) 、由end 返回的迭代器指向 末端元素的下一个 ,该迭代器并不指向容器中的任何实际元素,它只是起一个哨兵的作用,表示我们已处理完vector 中的所有元素;

(3) 、如果容器为空,则begin 和 end 返回的迭代器相同。

3、 迭代器的自增和解引用运算:vector<int>::iterator it=v.begin();

(1) 、解引用操作符(* 操作符 ) : *iterator 返回迭代器当前所指向的元素;

(2) 、自增运算与int 类型的自增运算一样: iterator++ 指向第二个元素;

(3) 、end 操作返回的迭代器不指向任何元素,故不能对它进行解引用或自增操作。

4、 迭代器应用的示例:

for(vector<int>::iterator it=v.begin();it!=v.end();it++)

    *it = 0;    //将元素都置为 0

5、 每种容器类型还定义了一种名为const_iterator 的类型,该类型只能用于读取容器内的元素值,不能改变其值。

6、 迭代器的算术操作:iterator+/-n; it1-it2

7、 任何改变vector 长度的操作都会使已存在的迭代器失效

3.5、标准库 bitset 类型

1、 bitset类是一种类模板, 在定义时要明确bitset 含有多少位 ,须在尖括号内给出它的长度值:bitset<32> bitset; 给出的长度值必须是常量表达式

2、 用string 对象初始化 bitset 对象: string对象和 bitset 对象之间是反转化的, string 对象最右边的字符用来初始化 bitset 对象的低阶位 ( 下标为 0 的位 )

3、 Bitset对象的操作:

(1) 、b.any()             //b 中是否存在置为 1 的二进制位

(2) 、b.none()           //b 中不存在置为 1 的二进制位吗

(3) 、b.count()          //b 中置为 1 的二进制位的个数

(4) 、b.size()           //b 中二进制位的个数

(5) 、b[pos]             // 访问 b 中在 pos 处的二进制位

(6) 、b.test(pos)       //b 中在 pos 处的二进制位是否为 1

(7) 、b.set()            // 把 b 中所有的二进制位置为 1

(8) 、b.reset()         // 把 b 中所有的二进制位置为 0

(9) 、b.set(pos)        // 把 b 中在 pos 处的二进制位置为 1

(10) 、b.reset(pos)    // 把 b 中在 pos 处的二进制位置为 0

(11) 、b.flip()         // 把 b 中所有的二进制位逐位取反

(12) 、b.flip(pos)     // 把 b 中在 pos 处的二进制位取反

(13) 、b.to_ulong()    // 返回一个 unsigned long 值

4、 bitset 中的 size 和 count 操作的返回值类型为 size_t 。

 

(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值