c++中定义了一个内容丰富的抽象数据类型标准库,其中最重要的是string和vector,他们分别定义了大小可变的字符串和集合。下面分别详细讲解两者还有bitset的一些基本用法。(新手记录的东西都很琐碎,没办法)
标准库string类型
读写:标准输入读取string类型(cin>>s;)忽略开头所有空白字符,读取字符再遇到空白字符读取终止, 返回所读的数据流。
getline(cin,line)读取整行文本不忽略开头空白字符(包括换行符),换行符终止读入,返回输入流,但是同时丢弃所有换行符,即换行符 不会存储在string对象中。
常用string对象操作:
s.empty() //空串返回true,否则false(即返回bool值)
s.size() //返回s字符个数(字符个数为0,s.size()==0等价于s.empty()为true)
s[n]; //字符数组
s1+s2; //对象相加
s1=s2; // 赋值
v1==v2; !=,<,<=,>,>= //比较
string::size_type类型:
size操作返回的是string::size_type类型的值,个人认为它与int只是存储范围大小的区别,是int的两倍。
特别注意的是,任何存储string的size操作结果的变量必须为string::size_type类型,不能将size返回值付给一个int变量。
和字符串字面值连接:
string s1="hello";
对象+字面值(+字面值): string s2=s1+"world";(或者s2=s1+"world"+"!";)
将两个字符串字面值相加是非法!!
string s3="hello"+"world";//error
string s4="hello"+"world"+s2;//error
从string对象获取字符:
下标获取:for(string::size_type ix=0; ix!=s.size(); ix++)
tolower(c) //如果c是大写字母则返回小写字母形式,否则直接返回c
toupper(c) //如果c是小写字母则返回大写字母形式,否则直接返回c
标准库vector类型:
vector是同一种类型的对象的集合,vector不是一种数据类型,是一个类模板。
定义方式:(vector<变量类型> 变量)vector
vector
初始化:vector
vector对象的操作:
v.empty() ;
v.size() ; //返回v中元素个数
v.push_back(c) ; //在v的末尾增加一个值为c的元素
v[n]; v1=v2;v1==v2; !=,<,<=,>,>=
特别注意的是,和string使用size_type类型类似,不能将size返回值付给一个int变量,vector类型总是包括vector的元素类型。
vector
vector::size_type //error
数组是不能扩展大小的,而vector对象可以动态增长,这种动态添加元素的方法是数组不能比拟的
添加元素:
vector
text.push_back(word) ;//添加元素word到text
注意,vector下标操作只能读取、修改已存在的元素,不能向空的对象中添加元素。
for(vector
ivec[ix]=0 ; //将全部元素变为0
vector
for(vector
ivec[ix]=ix ;//用下标方式向vector中添加元素这是办不到的!!
除了下标访问vector对象的元素外,还可以用迭代器访问。迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型。
每一种容器都定义了自己的iterator类型:如vector: vector
每一种容器都定义了一对begin和end函数。begin指向容器vector第一个元素,而end指向最后一个元素的下一个元素,即指向一个不存在的元素,作用在于作为遍历容器的哨兵。
For(vector
*iter=0;//用解引用操作符*来访问迭代器的元素
标准库bitset类型
bitset也是类模板,是二进制位集的处理。
string对象和bitset对象之间是反向转化的,string下标是从0--->size;bitset下标是从size-->0。
string s1("1100");//string对象直接表示位模式
bitset<32> bitvec(s1);// bitset模式中下标2、3位为1,下标0、1位为0.
bitset对象的操作:
b.size(); //b中二进制位的个数
b.count(); //b中置为1的二进制位的个数
b.set(); // b中所有二进制位都置为1
b.reset();//b中所有二进制位都置为0