c++ primer 第三章 标准库类型
1. string 标准库
1.1初始化
| string s1; | 默认构造函数s1为空 |
| string s2(s1); | 将s2初始化为s1的一个副本 |
| string s3(“value”); | 将s3初始化为一个字符串字面值副本 |
| string s4(n,’c’); | 将s4初始化为字符’c’的n个副本 |
string对象的赋值:赋值所做的工作:必须先将s1所占的内存释放掉,然后在分配足够的内存,最后将新字符串赋值到s1中;
string对象和字符串字面值的连接:+操作符的左右操作数必须至少一个是string类型的。如果试图将两个字符串的字面值连接起来是不合法的。
string 类型通过下标操作符[] 来访问string对象中的单个字符。
string对象中字符的处理(下表中的所有函数都在cctype头文件中定义)
| isalnum(c) | 如果c是字母或数字,则返回True |
| isalpha(c) | 如果c是字母,则返回true |
| iscntrl(c) | 如果c是控制字符,则返回true |
| isdigit(c) | 如果c是数字,则返回true |
| isgraph(c) | 如果c不是空格,但可打印,则为true |
| islower(c) | 如果c是小写字母,则为true |
| isprint(c) | 如果c是可打印字符,则为true |
| ispunct(c) | 如果c是标点符号,则为true |
| isspace(c) | 如果c是空白是否,则为true |
| isuper(c) | 如果c是大写字母,则为true |
| isxdigit(c) | 如果c是十六进制的数,则为true |
| tolower(c) | 如果c是大写字母,返回其小写字母的形式,否则直接返回c |
| toupper(c) | 如果c是小写字母,返回其大写字母的形式,否则直接返回c |
空白字符是:空格、制表符、垂直制表符、回车符、换行符、进制符
标点符号:处数字、字母、可打印的空白符(空格)以外的其他字符。
建议:采用 C 标准库头文件的 C++ 版本
C++ 标准库除了定义了一些选定于 C++ 的设施外,还包括 C 标准库。 C++ 中的头文件 cctype 其实就是利用了 C 标准库函数,这些库函数就
定义在 C 标准库的 ctype.h 头文件中。
C 标准库头文件命名形式为 name 而 C++ 版本则命名为 cname ,少了 后缀,.h 而在头文件名前加了 c 表示这个头文件源自 C 标准库。因此,
cctype 与 ctype.h 文件的内容是一样的,只是采用了更适合 C++程序 的形式。特别地,cname 头文件中定义的名字都定义在命名空间 std 内,
而 .h 版本中的名字却不是这样。
通常,C++ 程序中应采用 cname 这种头文件的版本,而不采 用 name.h 版本,这样,标准库中的名字在命名空间 std 中保持一致。 使用 .h 版本会给程序员带来负担,因为他们必须记得哪些标准库名字 是从 C 继承来的,而哪些是 C++ 所特有的。
2. 标准库vector类型
vecto是同一种类型的对象集合,每个对象都有一个对应的整数索引值,我们把vector成为容器。
#include <vector>
using std::vector;
vector是一个类模板,使用模板可以编写一个类的定义或函数的定义,而用于多个不同的数据类型。
定义vector<int> ivect
| 初始化vector | |
| 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对象的操作:
| v.empty() | 如果为空,则返回true,否则返回false |
| v.size() | 返回v中元素的个数 |
| v.push_back(t) | 在v的末尾增加一个值为t的元素 |
| v[n] | 返回v中位置为n的元素 |
| v1=v2 | 把v1中的元素替换为v2中元素的副本 |
| v1==v2 | 如果v1和v2相等,则返回true |
| !=,<,<=,>,>= | 条件操作符 |
vector下标操作不添加元素。进能对已经存在的元素进行下标操作。
3.迭代器:是一种检查容器内元素并遍历元素的数据类型。每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;
每种容器都有一个begain和end的函数用于返回迭代器,如果容器中有元素的话,有begain返回迭代器指向的第一个元素。由end操作返回迭代器指向vector的“末尾元素的下一个”,如果vector为空,begain返回的迭代器和end返回的迭代器相同。由end操作返回的迭代器并不指向vector中的任何元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已经处理完vector中的所有元素。迭代器的解引用操作符返回返回迭代器所指向的元素。迭代器的自增操作符是把容器中的迭代器向前移动一个位置。迭代器的的操作== 和!=是比较两个迭代器,如果两个迭代器对象指向同一个元素,则他们相同,否则就不相等。
const_interator 每种容器懂定义了一种名为const_interator的类型,该类型只能读取容器内的元素,不能改变其值。他自身的值可以改变,但是其指向的元素的值是不能改变的。
迭代器的算术操作包括:iter+n iter-n iter1-iter2
c++ primer 第三章 标准库类型的更多相关文章
- C++primer第三章标准库类型
除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...
- C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...
- C++ Primer 第三章 标准库类型string运算
1. 标准库类型 string string表示可变长的字符序列,使用string必须首先包含string头文件.如何初始化类的对象是由类本身决定的. int n; string s1;//默认初始化 ...
- C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型
标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...
- C++ primer读书笔记 chapter3 标准库类型
除第二章介绍的是C++的基本类型,本章将大致介绍一下C++定义的内容丰富的抽象数据库类型标准库.着重介绍一下sting.vector和bitset. 3.2标准库string类型 1.string类型 ...
- 《C++ Primer 4th》读书笔记 第3章-标准库类型
原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3911534.html
- C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector
1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...
- C++ 标准库类型-String,Vector and Bitset
<C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...
- C++Primer 第三章
//1.位于头文件中的代码一般不应该使用using声明.这是因为头文件的内容会拷贝到所有引用它的文件中,可能会产生始料未及的命名空间冲突. // 三种使用命名空间中的名字的方法 using names ...
随机推荐
- E20171005-ts
collapse n. 垮台; (身体的) 衰弱; vt. 使倒塌; 使坍塌; 使瓦解; vi. 崩溃; 倒塌; 折叠; (尤指工作劳累后) 坐 ...
- 洛谷P1387最大正方形(dp,前缀和)
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- JavaScript正则表达式(一)-常用方法
公司之前有个胖女孩说你竟然会正则? 其实正则没那么难:今天我们说说他常用的几个API. 在讲方法之前, 我们先对正则表达式做一个基本的了解: 1.正则表达式定义使用单个字符串来描述.匹配一系列符合某个 ...
- C/C++常用头文件 以及简单应用介绍
C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> ...
- Sublime Text Version 3.0,Build3143注册码
1.打开sublime text软件2.Help->Enter License3.复制以下BEGIN LICENSE和END LICENSE之间的部分,粘贴进去.(注意:不要复制BEGIN LI ...
- JavaScript入门二
******函数****** **函数定义** //普通函数定义 function f1() { console.log("Hello word!") } //带参数的函数 fun ...
- 【Leetcode 86】 Partition List
问题描述: 给定一个list, 将所有小于x的node放到左边,剩下的保持原样. 问题解决: 闲的无聊,用c++和python都做了一遍. 代码如下: # Definition for singly- ...
- javascript:void(0);什么意思
js里面void是一个操作符,该操作符计算表达式的值,但是不返回任何内容. <a href="javascript:void(0);"> 这里用到void(0)表示取消 ...
- Hibernate 配置双向多对多关联
本文解决问题:Hibernate 中配置项目(Project) 员工(Employee) 双向多对多关联 方案一:直接配置双向多对多 方案二:配置第三个关联类(xml) 将多对多查分开来(形成 ...
- Java中的异常注意点
在java中 使用throw关键字抛出异常 使用throws关键字声明异常 public static void main(String[] args) throws Exception{ ...