①
标准库string类型
几种初始化string对象的方式
string s1; //默认构造函数,s1是空串
string s2(s1); //将s2初始化为s1的一个副本
string s3("value"); //将s3初始化为一个字符串字面值副本
string s4(n,'c'); //将s4初始化为字符'c'的n个副本
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
几种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
!=,<,<=,>和>= //保持这些操作符惯有的含义
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
string::size_type定义为与unsigned型(unsigned int 或 unsigned long)具有相同
的含义而且可以保证足够大能够存储任意string对象的长度。
任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,
不要把size的返回值赋给一个int变量。
string对象比较操作是区分大小写的。在多数计算机上,大写的字母位于小写字母之前:
任意一个大写字母小于任意的小写字母。
◇ 如果两个string对象长度不同,且短的string对象与长的string对象的前面部分匹配,
则短的string对象小于长的string对象。
◇ 如果两个string对象的字符不同,则比较第一个不匹配的字符。
当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作符必须至少
有一个是string类型的;
string s1="hello";
string s2="world";
string s3=s1+",";
string s4="hello"+","; //错误,都是字面值
string s5=s1+","+"world"; //正确,+操作符两边都是string类型的
string s6="hello"+","+s2; //错误
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
解析s5
在对s5进行初始化时,子表达式s1+","将返回一个新string对象,后者再和字面值
"world\n"连接。整个初始化过程可以改写为:
string tmp=s1+",";
s5=tmp+"world";
下标操作可用作左值:
string str("some string");
for(string::size_type ix=0;ix!=str.size();++ix)
str[ix]="*";
string类型的输入操作符(cin>>string):
◇ 读取并忽略开头所有的空白字符(如空格、换行符、制表符)。
◇ 读取字符直到再次遇到空白字符,读取终止。
②
getline函数:
接受两个参数:一个输入流对象和一个string对象。
getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。
③
标准库vector类型
几种初始化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个副本
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
几种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
!=,<,<=,>,>= //保持这些操作惯有的含义
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
下标操作不添加元素
vector<int> ivec;
for(vector<int>::size_type ix=0;ix!=10;++ix)
ivec[ix]=ix;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
上述程序试图在ivec中插入10个新元素,元素值依次为0到9的整数。但是这里ivec是空的vector
对象,而且下标只能用于获取已存在的元素。
④
每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素,但不能
改变其值。
另外一种为const vector<T>::iterator 迭代器,这种类型几乎没什么用处:一旦它被初始化后,
只能用它来改写其指向的元素,但不能使它指向任何元素。
⑤
标准库bitset类型
几种初始化bitset对象的方法
bitset<T> b; //b有n位,每位都为0
bitset<T> b(u); //b是unsigned long型u的一个副本
bitset<T> b(s); //b是string对象s中含有的位串的副本
bitset<T> b(s,pos,n); //b是s中从位置pos开始的n个位的副本
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
用string对象初始化bitset对象
string strval("1100");
bitset<32> bitvec4(strval);
bitvec4的位模式中第2和3的位置为1,其余位置都为0.如果string对象的字符个数
小于bitsetd类型的长度,则高阶位将置为0。
注解
string对象和bitset对象之间是方向住转化的:string对象的最右边字符(即下标最大的字符)用来
初始化bitset对象的低阶位(即下标为0的位)。其他也一样。