C++Primer 标准库类型
来源:互联网 发布:ge端口 编辑:程序博客网 时间:2024/04/30 11:43
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 00001111 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;
- C++Primer 标准库类型
- 《C++Primer》 第三章 标准库类型
- C++primer第三章:标准库类型
- 《C++Primer》读书笔记---标准类型库
- c++Primer,三,标准库类型
- C++primer 3.3 标准库类型 vector
- C++Primer——标准库vector(容器)类型
- linux & C++Primer 学习笔记--标准库vector类型
- c++primer学习笔记(3.2)标准库string类型
- c++primer学习笔记(3.3)标准库vector类型
- c++primer学习笔记(3.5)标准库bitset类型
- 《C++primer》标准库类型 数组和指针
- 【C++Primer学习笔记】第3章 标准库类型
- C++Primer笔记 第三章 标准库类型
- c++primer学习笔记2 - 标准库类型
- C++Primer 学习笔记 第三章(标准库类型)
- C++Primer学习笔记3 标准库类型
- C++primer 学习(五)标准库类型
- PictureBox 控件 即时通讯网 推荐使用 MFC picture控件中显示图片
- CentOS 安装使用MongoDB
- 调用系统照片库并显示位置信息
- Qt显示程序之QWS_DISPLAY
- java初始化顺序
- C++Primer 标准库类型
- asp.net Oracle数据库左侧目录树及右侧数据绑定及分页
- codeforces 437C The Child and Toy
- 哪些图表是SCM以及管理层需要的?---说在图表之后。
- extjs的一些常用方法
- 模拟客户端与服务端大数据二进制压缩传输
- oracle中的insert语句
- Android Bitmap 全面解析(一) 加载大尺寸图片 ...
- node.js 访问webserver