C++Primer 标准库类型

1.抽象数据类型ADT:使用标准库定义的抽象数据类型时不关心它们如何表示,只需要知道它们支持什么操作。

2.using声明:命名空间的说明

#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::string;

3.标准库string类型:支持长度可变对的字符串。

(1)定义和初始化:初始化类需要用构造函数。

string s1;  //默认构造函数,s1是空串
string s2(s1);
string s3("value");
string s4(n,'c');

(2)对象读写:读取并忽略开头所有的空白字符,再次遇到空白字符读取终止。输入"    Hello World!  ",输出是 "Hello"。除非已知string对象中单词的数目,分别定义两个string对象,输出为"HelloWorld!"

(3)未知数目的string对象:

string word;
while(cin>>word)
   cout<<word<<" ";

(4)getline读取全部文本:读取整行数据直到换行符出现为止,getline停止读入并返回。

string line;
while(getline(cin,line))
	cout<<line<<endl;

(5)string对象的操作

   size操作:s.size()返回的是标准库类型string::size_type,而不是int型。

   string对象的大小:大写字母位于小写字母之前,位置越靠后的字母越大。比较string对象的第一个不匹配的字符,来判断string对象的大小。若长度不同,且短的部分和长的前半部分相同,则长的string对象更大。

   string对象的相加:若是两个string直接连接就好。若其中一方为字符串字面值,也可以直接连接。但不允许+两边都是字符串字面值

   string取字符:下标从0开始。而且[]中必须是一个string::size_type类型的值。

 

(6)对string中字符的处理 :函数均定义在cctype头文件中。

string  s("Hello World!!!");
string::size_type punct_cnt = 0;
for(string::size_type index = 0;index!=s.size();++index)
{
	if(ispunct(s[index]))
	    ++punct_cnt;
	s[index] = tolower(s[index]);
}
cout<<punct_cnt
	<<" punctuation charactors in " << s <<endl;


4.标准库vector类型

(1)vector的概念

     vector是同一种类型的对象的集合,称为容器,因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。vector是一个类模板class template,而不是一种数据类型。只有当vector指定了保存哪种类型的对象,vector<int>,vector<string>才是数据类型。

(2)vector定义和初始化

     虽然可以给给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空vector对象,然后再动态的增加元素。

(3)vector操作

     v.size():返回值是vector<T>::size_type 

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

string word;
vector<string> text;
while(cin>>word)
	text.push_back(word);
for(vector<string>::size_type ix = 0; ix!=text.size();++ix)
	cout<<text[ix]<<" ";
cout<<endl;
 

只能对已经存在的vector元素使用下表操作。因此不能用下标操作去添加元素,而要用push_back。


5.迭代器iterator:一种检查容器内元素并遍历元素的数据类型。标准库对所有容器都定义了一种迭代器类型,提供了除了下标操作之外更通用的元素访问的方法。

(1)容器的iterator类型:各个容器都定义了各自的名为iterator的成员

vector<int>::iterator iter;

(2)迭代器的操作:若vector不是空,则v.begin()返回的迭代器指向容器v中的第一个值v[0],而v.end()返回的迭代器指向末尾元素的下一个。若vector是空,则begin和end返回的迭代器相同。

(3)迭代器可以使用解引用操作符来访问其指向的元素。这里使用下标操作,即使容器是空也安全,因为在ix!=ivec.size()时循环就停止了。

for(vector<int>::iterator iter = ivec.begin(); iter!=ivec.end();++iter;)
*iter = 0;
(4)const_iterator:只能读取容器内的元素,迭代器本身可以自增和读取,但不能改变其指向元素的值。

     const vector<T>::iterator: const的迭代器,必须初始化,并不能改变指向。     

(5)迭代器算数操作:

     iter+n,iter-n: 加减的值必须是该vector的size_type或者difference_type类型。

     iter1-iter2:两个迭代器的距离也是difference_type的signed类型。


6.标准库bitset类型

(1)定义和初始化:bitset也是类模板,需要指定含有多少位。bitset输出位数从左到右为32位,31位....0位。string最右的字符即下标最大的字符用来初始化bitset对象的最低位。可以直接输出bitvec输出二进制位。

    bitset<32> bitvec:均初始化为0。

    bitset<16> bitvec1(0xffff):1111 1111 1111 1111。

    bitset<32> bitvec2(0xffff): 0000 0000 0000 0000 1111 1111 1111 1111

    string straval("1100");bitset<16> bitvec3(straval): 0000 0000 0000 1100。

    string str("1111 1110 0000 0011 0110 1");bitset<16> bitvec4(str,5,4): 1100。


(2)测试对象:count返回的是size_t的类型,定义在cstddef头文件中。

bool is_set = bitvec.any();
size_t bits_set = bitvec.count();
size_t sz = bitvec.size();

 (3)访问对象位:可以下标访问,也可以用set,test,reset来设置对象的值。

(4)对整个对象:bitvec.reset();bitvec.flip();

(5)获取对象的值:当bitset类型的长度小于或等于unsigned long的长度,即小于或等于32位时,可以使用to_long操作。

unsigned long ulong = bitvec.to_ulong();
cout<<"ulong =  "<<ulong<<endl;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值