第三章
1、几个标准库类类型
1、几个标准库类类型
string
构造函数有4种:
- string s1; //默认,s1=NULL
- string s2(s1); //s2初始化为s1的一个副本
- string s3("value");
- string s4(10,'a'); //s4初始化为"aaaaaaaaaa"
前者忽略空格,后者不忽略空格,并将从cin中取出整行,一次性送给s1,两者都是Ctrl+z退出while循环.
****string对象的操作
- s.empty()
- s.size() //返回string的长度
- s[n]
- s1+s2
- v1==v2
- !=,<,<=...
注意s.size()返回的不是int类型,而是相当与unsigned的string::size_type类型,所以接这个函数的返回值不能用int,要用string::size_type,如果不这样,就可能会有数据溢出的问题(int范围是unsigned范围的一半),即:
string::size_type size=s.size();
//ok from unsigned to unsigned
2、string对象中字符的处理(有众多函数,如islower()。。。见P77)
****实例:
//去掉字符串中的标点符号
3、vector#include <iostream>#include <string>#include <cctype>using namespace std;int main(){string s("Hellow Worssld !QQ!!");string res;for( string::size_type i=0; i!=s.size(); ++i){if(!ispunct(s[i])){res+=s[i];}}cout<<res<<endl;}、
- vector不是一个数据类型,而是一个模板类,指定数据类型后才可以成为一个数据类型。
- vector是一个可动态增长的数组
- vector的size()函数返回一个vector<T>::size_type类型(即unsigned的值,与string::size_type类似)
- vector[index]操作只能获取元素,不能给元素赋值,赋值应该用v.push_back(t)函数
- 实例
- //将输入的单词转出大写的
- #include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(){
string s("Hellow Worssld !QQ!!");
string res;
for(string::size_type i=0; i!=s.size(); ++i){
if(!ispunct(s[i])){
res+=s[i];
}
}
cout<<res<<endl;
}
5、iterator迭代器
- 迭代器是一种特殊的数据类型,能够遍历容器内的元素,并访问这些元素的值。
- 标准库为每一种容器都定义了一种迭代器类型。
- 每个容器都定义了一对名为begin()和end()的函数,用于返回迭代器:
- 例如:
- vector<int>::iterator iter=ivec.bin(); //指向vector<int>类型元素的迭代器iter被初始化为指向第一个元素
- end()返回的是最后一个元素的下一个位置。
- 实例:#include <iostream>
#include <vector>using namespace std;int main(){vector<int> intVec(10,1);cout<<"修改前"<<endl;for( vector<int>::iterator iter= intVec.begin() ;iter!= intVec.end() ;++iter){ // 注意这里,iterator是属于vector<int>这种类型,而不是属于intVec对象的cout<<*iter<<endl;}for(vector<int>::iterator iter=intVec.begin();iter!=intVec.end();++iter){*iter=(*iter)*2;}cout<<"修改后"<<endl;for(vector<int>::iterator iter=intVec.begin();iter!=intVec.end();++iter){cout<<*iter<<endl;}}
- 区别 vector<int>::const_iterator 和 const vector<int>::iterator
前者表明该iterator是指向const元素的,即不能通过*iter改变元素的值,即不能改变元素;
而后者是指该iterator是const的,不能改变iterator。
6、标准库bitset类型
- bitset类型对象的区别仅在于其长度而不在于其类型即
bitset<32> bitvec;
//32bits, all zero
- string对象和bitset对象之间是反向转化的:string对象的最右边字符(即下标最大的字符)用来初始化bitset对象的低阶位(即下标为0的位)