随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

第三章 标准库类型


标准库string类型
几种初始化string对象的方式

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

几种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
!=,<,<=,>>=           //保持这些操作符惯有的含义

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;        //错误

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

几种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
!=,<,<=,>,>=                   //保持这些操作惯有的含义

下标操作不添加元素

vector<int> ivec;
for(vector<int>::size_type ix=0;ix!=10;++ix)
ivec[ix]
=ix;

上述程序试图在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个位的副本

用string对象初始化bitset对象
string  strval("1100");
bitset<32>  bitvec4(strval);
bitvec4的位模式中第2和3的位置为1,其余位置都为0.如果string对象的字符个数
小于bitsetd类型的长度,则高阶位将置为0。
注解
string对象和bitset对象之间是方向住转化的:string对象的最右边字符(即下标最大的字符)用来
初始化bitset对象的低阶位(即下标为0的位)。其他也一样。

posted on 2009-08-11 23:05 八路 阅读(164) 评论(0)  编辑 收藏 引用 所属分类: C++primer 笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理