C++primer 学习(五)标准库类型

现在学习第三章的知识点:

标准string类

string类型支持长度可变的字符串,使用之前的声明如下:

#include<string>

using std::string;

1.string类的定义和初始化

string s1;     //默认,s1为空串

string s2(s1);    //将s2初始化为s1的副本

string s3("value");

string s4(n,'c');

以上是常见的初始化string对象的方式

2.string对象的读写

#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin>>s;
cout<<s<<endl;
system("pause");
return 0;
}

#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
while(cin>>s)                //ctrl+z可以跳出循环
cout<<s<<endl;
system("pause");
return 0;
}


getline(cin,line)可以读取输入的整行文本。


3.string对象的常见操作

s.empty()   //s为空串返回true,否则返回false

s.size()      //返回s中字符的个数

s[n]           //返回s中位置为n 的字符

s1+s2      //把s1和s2连接成为一个新的字符串,返回新的字符串

s1=s2     //把s2的内容复制到s1里面

v1==v2   //比较v1和v2,的内容,相同则返回true

例如:

#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1;
string s2;
//int n;
cin>>s1;
cin>>s2; 
if(s1.empty())
return 0;
    for(int n=0;n<s1.size();n++)
cout<<s1[n]<<endl;
for(int n=0;n<s2.size();n++)
cout<<s2[n]<<endl;
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s1+s2<<endl;
system("pause");
return 0;
}

4.string对象中字符的处理

常见的字符操作函数,这些函数都在cctype头文件有定义。

isalnum
isalpha
isblank
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
 isxdigit
tolower
toupper


标准库vector类

vector类指的是容器,它可以包含其他对象。但是有一个需要注意的知识点:一个容器中的所有对象都必须是同一种类型。

使用容器类的声明如下:

#include<vector>

using std::vector;

vector 是类模板,使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。注意的是,vector不是一种数据类型,而只是一个类模板。

定义类模板的例子如下:

vector<int> iver;

vector<Animal> eat;

1.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。

当然,如果没有指定元素的初始化,标准库会自动匹配一个元素初始化。

例如:

vector<int> f1(10);         //10个元素全部初始化为0

vector<string> f2(10);     //10个字符串全部初始化为空串

2.vector对象的操作

vector<class> v

v.empty()        //判断v是否为空,空则返回true

v.size()           //返回v中元素的个数

v.push_back(t)         //在v的末尾增加一个值为t的元素

v[n]                             //返回v中位置为n的元素

v1=v2

v1==v2

>,<,>=.<=

/*************************************   输入一组字符串,顺序输出它们

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
string s;
vector<string> word;
while(cin>>s)
word.push_back(s);
for(vector<string>::size_type ix=0;ix<word.size();ix++)
cout<<word[ix]<<endl;
system("pause");
return 0;
}

****************************************************************/

/***************************************   小写转大写

#include<iostream>
#include<string>
#include<vector>
#include<cctype>
using namespace std;
int main()
{
vector<string> T;
string s;
cout<<"输入数个单词"<<endl;
while(cin>>s)
T.push_back(s);           //输入字符串
if(T.size()==0)
{
cout<<"No input"<<endl;
return -1;
}
int n=0;
for(vector<string>::size_type i=0;i<T.size();++i)
{
for(string::size_type j=0;j<T[i].size();++j)
{
if(islower(T[i][j]))
T[i][j]=toupper(T[i][j]);
}
cout<<T[i]<<"\t";
++n;
if(n%8==0)
cout<<endl;
}
system("pause");
return 0;
}

***************************************************/


迭代器简介

迭代器是一种数据类型,检查容器内的元素并且遍历元素的一种数据类型。

1.基本类型

每种容器都有自己的迭代器类型,例如:vector

vector<int>::iterator  iter

其中iterator就为迭代器实际类型。

2.begin和end操作

使用范例:

vector<int>::iterator iter=iver.begain();

for(vector<int> iver::size_type i=0;i!=iver.end();++i)

{

cout<<iver[i]<<endl;

}


3.迭代器的算术操作符

加减运算


标准库bitset 类型

bitset类库是用来处理二进制位的有序集。

#include<bitset>

using std::bitset;

1.bitset对象的定义和初始化

bitset<int n> name;  //尖括号里面是bitset的长度值,必须一开始就明确,表明有多少位

bitset<n> b;                  //b有n位,每位都为0

bitset<n> b(u);               //b是unsigned long 型u的一个副本

bitset<n> b(s)                //b是string对象s中含有的位串的副本

bitset<n> b(s,pos,n);         //b是从s中的位置pos开始的n个位的副本

2.bitset的常见的操作

b.any()        是否存在置为1的二进制位

b.none()      不存在为1的二进制位

b.count()       置为1的位数个数

b.size()          二进制位的个数

b.set()          全置为1

b.set(pos)          某位置为1

b.reset()      全置为0

b.reset(pos)

b.flip()           全部位取反

b.flip(pos)



再谈string



与容器共有的string操作:(以迭代器为基础)

s.insert(p,t);

s.insert(p,n,t);

s.insert(p,b,e);

s.assign(b,e);

s.erase(b,e);

(上述的参数类型都为迭代器,除了t)










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值