C++primer第三章:标准库类型

 

一、标准库string类型:#include<string>

1、string对象的定义和初始化

 表3.1几种初始化string对象的方式

string  s1;默认构造函数,s1为空串
string  s2(s1);将s2初始化为s1的一个副本
string  s3("value");将s3初始化为一个字符串字面值的副本
string  s4(n,'c');将s4初始化为字符'c‘的n个副本

2、string对象的操作

s.empty()如果s为空串,则返回true,否则返回false
s,size()返回s中字符的个数
s[n]返回s中位置为n的字符,位置从0开始计数
s1+s2把s1和s2连接成一个新的字符串,返回新生成的字符串
s1=s2把s1内容替换为s2的副本
v1==v2比较v1和v2的内容,相等则返回true,否则返回false
!=  <  <=  >  >=保持这些操作符惯有的含义

注意:size() 成员函数返回的是string::size_type类型,它定义为与unsigned型(unsigned int 和 unsigned long )具有相同的含义。

 

二、标准库 vector 类型 #include<vector>

1、vector 对象的定义和初始化

定义: vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。我们把vector 称为容器,它可以包含其他对象,一个容器中的所有对象必须是同一种类型。

表3.2几种构造函数

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个副本

vector对象的重要属性就是在于可以运行时高效的添加元素。

2、vector 对象的操作

v.empty();如果v为空,则返回true,否则返回false
v.size();返回v中元素的个数
v.push_back(t);在v的末尾增加一个值为 t 的元素
v[n];返回v中位置为n的元素
v1=v2;把v1的元素替换为v2中元素的副本
v1==v2;如果v1与v2相等,则返回true
!=  <  <=  >  >=保持这些操作符惯有的含义

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

 

三、迭代器(iterator)

迭代器是一种检查容器内元素并遍历元素的数据类型。

1、容器的iterator类型

每种容器类型都定义了自己的迭代器类型。

vector<int>::iterator   iter;

iter的数据类型是由vector<int>定义的iterator类型。

2、begin和end操作

begin函数:返回的迭代器指向第一个元素。

例如:vector<int>::iterator   iter=ivec.begin() ;         iter即指该元素为ivec[0]  ;

end函数:返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器。表明指向了一个不存在的元素。

3、vector迭代器的自增和解引用运算

解引用操作符(*操作符)

*iter=0;  解引用操作符返回迭代器当前所指向的元素。

假设iter指向vector对象ivec的第一个元素,那么*iter和ivec[0]就是指向同一个元素。上面这个语句就是把这个元素的值赋为0。

注意:由end操作返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作。

4、const_iterator

该类型只能用于读取容器内元素,但不能改变其值。

 

四、标准库bitset类型

1、bitset对象的定义和初始化

要明确bitset含有多少位,须在尖括号内给出它的长度值。

例如:bitset<32> bitvec ; //32bits,all zero   给出的长度值必须是常量表达式。

表3.3初始化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个位的副本

注意:当用string对象初始化bitset对象时,从string对象读入位集的顺序是从右到左。

2、bitset对象上的操作

b.any();b中是否存在置为1的二进制位?
b.none()

b中不存在置为1的二进制位吗?

b.count()b中置为1的二进制位的个数
b.size()b中二进制位的个数
b[pos]访问b中在pos处的二进制位
b.test(pos)b中在pos处的二进制位是否为1?
b.set()把b中所有二进制位置为1
b.set(pos)把b中在pos处的二进制位置为1
b.reset()把b中所有二进制位置为0
b.reset(pos)把b中在pos处的二进制位置为0
b.flip()把b中所有二进制位逐位取反
b.flip(pos)把b中在pos处的二进制位取反
b.to_ulong用b中同样的二进制位返回一个unsigned  long 值
os<<b把b中的位集输出到os流

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值