现在学习第三章的知识点:
标准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)