您的位置:首页 > 编程语言 > C语言/C++

【C++ Primer学习笔记】第3章:标准库类型

2012-03-06 00:00 399 查看

除第2章介绍的基本数据类型外,C++还定义了一个内容丰富的抽象数据类型标准库。

3.1命名空间的using声明
在编译我们提供的实例程序前,读者一定要注意在程序中添加适当的#include和using说明。
有一种情况下,必须总是使用完全限定的标准库名字:在头文件中

3.2标准库string类型
编程时一定要注意区分字符串字面值和string数据类型的使用。
string类型输入:读取并忽略开头所有空白字符,直至再次遇到空白字符读取终止。
getline:接受两个参数,一个输入流对象和一个string对象,从输入流下一行读取,遇到换行符终止并丢弃换行符。
任何存储string的size操作结果的变量必须为string::size_type类型。不要把size返回值赋给int变量。
为避免溢出,保存一个string对象size最安全的方法是使用标准库类型string::size_type。
当进行string对象和字符串字面值混合连接时,+操作符的左右操作数必须至少一个是string类型。
下标操作符需要取一个size_type类型的值,来标明要访问字符的位置。
C++程序员应采用cname这种头文件版本,而不是name.h版本,这样标准库中的名字在命名空间std中保持一致。使用.h版本会给程序员带来负担,因为他们必须记得哪些标准库名字是从C继承过来的,哪些是C++所特有的。

3.3标准库vector类型
vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。
定义vector对象要指定类型和一个变量的列表。
虽然可以对给定元素个数的vector对象预先分配内存,但是更有效的方法是先初始化一个空的vector对象,然后再动态的增加元素。
push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面。
C++程序员习惯于优先使用!=而不是<来编写循环判断条件。

3.4迭代器简介
迭代器是一种检查容器内元素并遍历元素的数据类型。
每个标准容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同,这种类型支持迭代器的各种操作。
end操作返回的迭代器不指向任何元素。
不要把const_iterator对象和const的iterator对象混淆。
迭代器加上或者减去的值应该是vector的size_type或者difference_type类型。

3.5标准库bitset类型
定义bitset时,要明确bieset含有多少位,须在尖括号中给出它的长度值。
string对象的最右面字符用来初始化bitset对象低阶位。
count操作的返回类型是标准库中命名为size_t的类型。size_t定义在cstddef头文件中。
相对于C++内置数据的数组和指针而言,程序员应优先使用标准库类类型。

习题3.5 从标准输入每次读入一行文本

#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
while(getline(cin,line))
cout<<line<<endl;
return 0;
}


习题3.8 从标准输入读入多个string对象并连接起来,连接后对象以空格隔开

#include<iostream>
#include<string>
using namespace std;

int main()
{
string sumstr,str;
cout<<"Enter strings(Ctrl+Z to end):"<<endl;
while(cin>>str)
sumstr=sumstr+' '+str;
cout<<"string equal to the concatenation of these strings is:"
<<endl<<sumstr<<endl;
return 0;
}


习题3.10

#include<iostream>
#include<string>
#include<cctype>
using namespace std;

int main()
{
string str,xstr;
bool has_punct=false;
char ch;

cout<<"Enter a string:"<<endl;
getline(cin,str);
for(string::size_type index=0;index!=str.size();index++)
{
ch=str[index];
if(ispunct(ch))
has_punct=true;
else xstr+=ch;
}
if(has_punct)
cout<<"result:"<<endl<<xstr<<endl;
else {cout<<"No pounctuation character in the string?!"<<endl;
return -1;
}
return 0;
}


习题3.14

#include<iostream>
#include<string>
#include<vector>
#include<cctype>
using namespace std;

int main()
{
vector<string> svec;
string str;

cout<<"Enter text(Ctrl+Z to end):"<<endl;
while(cin>>str)
svec.push_back(str);

cout<<"Transformed elements from the vector:"<<endl;
for(vector<string>::size_type ix=0;ix!=svec.size();++ix)
{
for(string::size_type index=0;index!=svec[ix].size();++index)
if(islower(svec[ix][index]))
svec[ix][index]=toupper(svec[ix][index]);
cout<<svec[ix]<<" ";
if((ix+1)%8==0)cout<<endl;
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++