《c++ primer》第三章标准库类型学习笔记整理_2010/11/06

6. 标准库类型

string

#include<string>

cin>>str;

① 读取并忽略开头所有的空白字符(空格、换行、制表符等)

② 读取字符直至再次遇到空白字符

可用getline()函数来读取整行文本:

不忽略开头空白符

不包括换行符

cout<<str;

string::size_type类型

string库中size()函数返回的是string::size_type类型,虽然把它赋值给int类型的变量不会出现编译错误,但是由于int类型表示的范围太小,容易造成溢出。

string类型的大小判断

按字典排序顺序(小写字母>大写字母),从第一个字符开始进行大小判断,一旦判断出大小,则确定两个字符串的大小并不再向后进行大小判断。

string对象对字符的处理

isalnum(c)

如果 是字母或数字,则为 True

isalpha(c)

如果 是字母,则为 true

iscntrl(c)

如果 是控制字符,则为 true 

isdigit(c)

如果 是数字,则为 true

isgraph(c)

如果 不是空格,但可打印,则为 true

islower(c)

如果 是小写字母,则为 true

isprint(c)

如果 是可打印的字符,则为 true

ispunct(c)

如果 是标点符号,则 true

isspace(c)

如果 是空白字符,则为 true

isupper(c)

如果 是大写字母,则 true

isxdigit(c)

如果是 十六进制数,则为 true

tolower(c)

如果 大写字母,返回其小写字母形式,否则直接返回 c

toupper(c)

如果 是小写字母,则返回其大写字母形式,否则直接返回 c

【例】

////////////////////////////////////////////////////读入未知数量的字符串

string str;

while(cin>>str)

cout<<str<<endl;

如果输入:hellohello word

则输出:hello

hello

world

////////////////////////////////////////////////////计算一个字符串中标点的个数

int x;

int count=0;

string str;

if(getline(cin,str))

{

cout<<str<<endl;

for(string::size_type i=0;i<str.size();i++)

if(ispunct(str[i]))

count++;

}

cout<<count<<endl;

/////////////////////////////////////////////////////把一个字符串所有字母改成大写

string str;

getline(cin,str);

for(string::size_type i=0;i<str.size();i++)

str[i]=toupper(str[i]);

cout<<str<<endl;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

vector

是同一种类型的对象的集合,每个对象都有一个对应的整数索引值(类似数组)

#include<vector>

vector是类模版,定义时必须指明是那种类型的容器。

格式:

vector<类型名容器变量名;

vector对象动态增长

在元素值已知的情况下,更有效的方法是先初始化一个空vector对象,然后再动态地增加元素。

vector<T>::size_type

使用size_type类型时,必须指出该类型是在哪定义的。

不能直接写成vertor::size_type

【例】

////////////////////////////////////////////////////将个5字符串放入字符串容器里,然后输出

vector<string> strvect;

string str;

for(string::size_type i=0;i<5;i++)

{

getline(cin,str);

strvect.push_back(str);

cout<<strvect[i]<<endl;

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

iterator

每种容器类型都定义了自己的迭代器类型

vector<T>::iterator 迭代器变量名;

begin():返回指向容器内第一个元素的迭代器。

end():返回指向容器内末端元素的下一个元素的迭代器。

const_iterator:只能用于读取容器内的元素,不能改变其值。

const vector类型只能用const_iterator迭代器来遍历。

【例】

////////////////////////////////////////////////////将个5字符串放入字符串容器里,然后输出

vector<string> strvect;

string str;

for(string::size_type i=0;i<5;i++)

{

getline(cin,str);

strvect.push_back(str);

cout<<strvect[i]<<endl;

}

////////////////////////////////////////////////////用迭代器修改容器内元素的值,然后输出

vector<int> intvect(10,1);

for(vector<int>::size_type i=0;i<intvect.size();i++)

cout<<intvect[i]<<" ";

cout<<endl;

vector<int>::iterator intvectiter=intvect.begin();

while(intvectiter!=intvect.end())

{

*intvectiter=0;

cout<<*intvectiter<<" ";

intvectiter++;

}

cout<<endl;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

bitset

二进制位的有序集

#include<bitset>

定义格式:

bitset<长度变量名;

unsigned值初始化bitset对象

该值将转化为二进制的位模式,然后顺序放入bitset中。

如果bitset的长度小于该数的二进制位数,则自动舍去高位。

如果bitset的长度大于该数的二进制位数,则高位自动补0

string对象初始化bitset对象

String对象直接表示为位模式,反向放入bitset中。

【例】

////////////////////////////////////////////////////用迭代器修改容器内元素的值,然后输出

vector<int> intvect(10,1);

for(vector<int>::size_type i=0;i<intvect.size();i++)

cout<<intvect[i]<<" ";

cout<<endl;

vector<int>::iterator intvectiter=intvect.begin();

while(intvectiter!=intvect.end())

{

*intvectiter=0;

cout<<*intvectiter<<" ";

intvectiter++;

}

cout<<endl;

/////////////////////////////////////////////////////输入一个串,用bitset存好,然后取反等操作

string str;

cin>>str;

bitset<32> strbit(str);

for(size_t i=0;i<strbit.size();i++)

cout<<strbit[i];

cout<<endl;

strbit.flip();//取反

for(size_t i=0;i<strbit.size();i++)

cout<<strbit[i];

cout<<endl;

strbit.set();//全部置1

for(size_t i=0;i<strbit.size();i++)

cout<<strbit[i];

cout<<endl;

strbit.reset();//全部置0

for(size_t i=0;i<strbit.size();i++)

cout<<strbit[i];

////////////////////////////////////////////////////输入一个正整数,存入bitset,然后输出

unsigned int x;

cin>>x;

bitset<32> intbit(x);

for(size_t i=0;i<intbit.size();i++)

cout<<intbit[i];

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

---------------------------------《c++ primer》第三章标准库类型学习笔记整理  2010/11/06    李诗思

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章