一、标准库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流 |