c++基础复习之标准库类型

1. 标准库string类型
   string 类型支持长度可变的字符串,标准库string类型的目的就是满足对字符串的一般应用。
   使用string类型对象,必须包含相关头文件即:(#include”string”)
1.1 string对象的定义和初始化

//几种初始化string对象的方式
string s1;               //默认构造函数,s1为空串
string s2(s1);           //将s2初始化为s1的一个副本
string s3("hello")       //将s3初始化为一个字符串字面值副本
string s4(n, 'c');       //将s4初始化为字符'c'的n个副本

注:字符串字面值与标准库string类型不是同一种类型。

  • 它们都是以’\0’结尾
string s1("value");  
for (string::size_type i = 0;s1[i] != '\0'; ++i)  
    cout << s1[i] << ' ';  
cout << endl;  
  • 其次它们根本不是同一种类型
string s1 = "ABC";  
char s2[] = "CDE";  
string tmp = s1;  
s1 = string(s2);  
strcpy(s2,tmp.c_str());  
cout << s1 << endl;  
cout << s2 << endl; 


1.2 string对象的操作

//string操作
s.empty()          //如果s为空串,则返回true,否则返回flase
s.size()           //返回s中字符个数
s[n]               //返回s中位置为n的字符,位置从0开始计数
s1 + s2            //把s1、s2连接成一个新字符串,返回新生成的字符串
s1 = s2            //把s1内容替换为s2的副本
v1 == v2           //比较v1、v2的内容,相等则返回true,否则返回flase                  

1.2.1 string::size_type类型
   string类类型和许多其他库类型都定义了一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。string::size_type类型可以保证足够大到能够存储任意string对象的长度。

string str = "Hello World";  
string::size_type length = str.size(); 

1.2.2 string对象赋值

string s1, s2="hello";
s1 = s2;

注:赋值操作需要做一些操作:它必须把s1占用的相关内存释放掉,然后再分配给s1足够存放s2副本的内存空间,最后把s2中所有的字符都复制到新分配的内存中!

1.2.3 从string对象获取字符
   可用下标操作符([])分别取出string对象的每个字符,分行输出。string对象str下标的取值范围:0~str.size()-1

string str ("Some thing!");  
for (string::size_type index = 0; index != str.size(); ++index)  
    cout << str[index] <<endl;  

注:下标操作可用作左值(str[index] = ‘*’;)

1.2.4 string对象中字符的处理

 /*
 isalnum,isalphaiscntrl,isdigit,isgraph,islower,isprint,ispunct,isspace,isupper,isxdigit,tolower,toupper.
 */
 isalnum(c)       //如果c是字母或者数字,则为true
 islower(c)       //如果c是小写字母,则为true
 tolower(c)       //如果c是大写字母,则返回其小写字母形式,否则直接返回c

2. 标准库vector类型
   vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库将负责管理与存储元素相关的内存。我们将vector称之为容器,一个容器中的所有对象都必须是同一类型的。(#include”vector”)
2.1 vector对象的定义和初始化

//几种初始化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个副本

注: 1)如果vector对象保存的是内置数据类型(如:int),那么标准库将用0值创建元素初始化式。
   2)如果vector保存的是含有构造函数的类类型的元素,那么标准库将用该类型的默认构造函数创建元素初始化式。
   3)如果vector保存的类类型元素没有默认构造函数,程序员就不能仅提供元素个数,还要提供初始值。

2.2 vector对象的操作

//vector操作
v.empty()       //如果v为空,则返回true,否则返回flase
v.size()        //返回v 中元素的个数
v.push_back(t)  //在v的末尾增加一个值为t的元素
v[n]            //返回v中位置为n的元素
v1 = v2
v1 == v2

2.2.1 向vector添加元素
   push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是“插入(push)”到vector对象的“后面(back)”。

string word;
vecctor<string> text;
while(cin >> word){
    text.push_back(word);
}

2.2.2 vectord下标操作
   vector的下标操作符接受一个值,并返回vector中该对应位置的元素。

//每个元素重置0
for(vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
   ivec[ix] = 0;

3. 标准库bitset类型
   有些程序要处理二进制的有序集,每个位可能包含0值或者1值。位是用来保存一组项或条件的yes/no信息的简洁方法。标准库bitset类简化了位集的处理(#include”bitset”)。
3.1 bitset对象的定义和初始化
   与vector不一样的是bitset类型对象的区别仅在其长度二不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度。

bitset<32> bitvec;   //32bits,all zero

注:位集合的位置编号从0开始。

//四种初始化bitset的方法  
bitset<n> b;                //b有n位,每位都为0
bitset<n> b(u);             //b是unsigned long型u的一个副本
bitset<n> b(string);        //b是string对象s中含有的位串的副本
bitset<n> b(string,pos,m);  //b是s中从位置pos开始的n个位的副本

3.2 用string对象初始化bitset对象
   位集合的位置编号从0开始,但是,他的顺序是从右往左排的!以0位开始的位串是低阶位,以n结尾的是高阶位!
这里写图片描述

/* 
用string对象初始化bitset对象 
仍然是从右往左:string对象的最右边字符,用来初始化bitset对象的低阶位! 
*/  
    string str("1100");  
    bitset<16> b(str);  
    string str("1000110011101111");  
    bitset<4> b(str); //从左边开始截取  

总结:

  • string类型提供了变长的字符串,而vector类型则可用于管理同一类型的对象集合。
  • 迭代器(vector<int>::iterator iter = ivec.begin())实现了对存储于容器中对象的间接访问。迭代器课用于访问和遍历string类型和vector类型元素。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值