C++ Primer 笔记 第三章

C++ Primer

第三章 标准库类型

3.1using声明

例:

using namespace atd;

using std::cin;

3.2string类型

初始化方式


string s1


默认构造函数,s1为空串


string s2(s1)


将s2初始化为s1的一个副本


string s3(“value”)


将s3初始化为一个字符串的副本


string s4(n, ‘c‘)


将s4初始化为字符‘c‘的n个副本

getline读取整行文本

getline接受两个参数:一个是输入流对象和一个string对象。不保存换行符。

例:while(getline(cin, str));

3.2.3string对象的操作


s.empty()


判断是否为空,空则返回true,否则返回false


s.size()


返回s中字符个数,返回string::type_size类型,不要赋值给int(signed)类型变量


s[n]


返回s中下标为n的字符,从0开始计数


s1 + s2


返回新连接的字符串


s1 = s2


把s1的内容替换为s2的副本


v1 == v2


比较,返回值为布尔类型


!=, <, <=, >, >=


保持惯有特性

3.2.4对象中字符的处理

头文件: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


isupper(c)


如果c是大写字母,返回true


isxdigit(c)


如果c是十六进制数,返回true


tolower(c)


如果c是大写字母,则返回相应小写字母,否则返回本身


toupper(c)


如果c是小写字母,则返回相应大写字母,否则返回本身

可打印字符:可显示表示的字符;

空白字符:空格,制表符,垂直制表符,回车符,换行符和进纸符中的任意一种;

标点符号:除了数字,字母,空白字符以外的可打印的字符。

3.3 vector

头文件:<vector>

定义:vector<elemtype> vname;

vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型,vector类型的每一种都指定了保存元素的类型。

3.3.1 vector对象的定义和初始化


vector<T> v1;


默认构造函数,v1为空


vector<T> v2(v1);


v2是v1的一个副本


vector<T> v3(n, i);


v3包含n个值为i的元素


vecor<T> v4(n);


v4含有值初始化的元素的n个副本

c++并非预先分配合适的空间,而是先初始化一个空vector对象,然后动态地增加元素。

3.3.2 vector对象的操作


v.empty()


判断是否为空,空则返回true,否则返回false


v.size()


返回v中字符个数,返回vector<T>::type_size类型,不要赋值给int(signed)类型变量


v[n]


返回v中下标为n的字符,从0开始计数


v.push_back(t)


在v的结尾添加一个值为t的元素


v1 = v2


把v1的内容替换为v2的副本


v1 == v2


比较,返回值为布尔类型


!=, <, <=, >, >=


保持惯有特性

3.4 迭代器

迭代器是一种检查容器内元素并遍历元素的数据类型。

标准库为每一种标准容器定义了一种迭代器类型,即含有名为iterator的成员。

每个容器都定义了一对名为begin和end的函数,用于返回迭代器。

每种容器还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素的值,但const_iterator自身可变,它和const的iterator对象不同。

迭代器的算数操作:

iter + n (n为整数)

iter1 – iter2

任何改变vector长度的操作都会使已存在的迭代器失效。

3.5标准库bitset类型

头文件及using声明:

<bitset>

using std::bitset;

定义:

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


bitset<n> b


b有n位,每位都为0


bitset<n> b(u)


b是unsigned ling型u的一个副本


bitset<n> b(s)


b是string对象s中含有的位串的副本


bitset<n> b(s, pos, n)


b是s中从位置pos开始的n个位的副本

从string对象读入位集的顺序是从右向左。

3.5.2 bitset对象上的操作


b.any()


是否存在1


b.none()


是否不存在1


b.count()


1的个数


b.size()


b中二进制的位数


b[pos]


返回b中pos位置的二进制数


b.test(pos)


pos处是否为1


b.set()


所有设置为1


b.set(pos)


b.reset()


所有设置为0


b.reset(pos)


b.flip()


所有位取反


b.flip(pos)


b.to_ulong()


返回该二进制表示的unsigned
long值


os<<b


把b中的位集输出到os流

count操作返回类型是标准库中size_t类型,该类型定义在stddef.h中,是一个与机器相关的unsigned类型,其大小足以保证储存内存中对象的大小。

C++ Primer 笔记 第三章

时间: 2024-10-25 05:40:29

C++ Primer 笔记 第三章的相关文章

C++PRIMER 阅读笔记 第三章

本章主要介绍 string vector 和 bitset, 不能贪多,现在本文主要介绍 string 与 vector 头文件中最好不要使用namespace std, 因为头文件会直接被预处理器放置到C中 std::string 的构造方式: string s1; string s2(s1); string s3("value");string s4(n,'c');           第三种构造方式可有"\0"? cout 与 cin 可以直接操作string

MySQL Cookbook读书笔记第三章

1,查询指定列/从指定列中查询 若需要指定每一列在查询结果中出现的先后顺序,可以在select语句中指定(dstuser在dsthost之后): 查询显示用户所关注的列: 2,指定查询行 使用where关键字可以查询符合条件限制的数据例如:查找srchost为venus或者srchost以s开头的行记录: 使用操作符like进行模式匹配,其中%表示通配符,代表一个差多为任意值的字符串. where使用操作符and可以查询多个条件: 条件并集: 3,格式化显示查询结果 当查询语句中没有重命名列名,

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

effective java-读书笔记-第三章 对于所有对象都通用的方法

个人博客同步发布:effective java-读书笔记-第三章 对于所有对象都通用的方法 第三章 对于所有对象都通用的方法 所有非final方法(equals.hashCode.toString.clone.finalize)都有明确的通用约定,因为它们被设计成是要被覆盖的,如果不遵守,基于散列的集合(HashMap.HashSet.HashTable)可能无法结合该类一起运作. 第8条 覆盖equals时请遵守通用约定 覆盖equals规范: 自反性(reflexive).对于任何非null

Linux内核设计与实现读书笔记——第三章

Linux内核设计与实现读书笔记——第三章 进程管理 20135111李光豫 3.1进程 1.进程即处于执行期的程序,并不局限于一个可执行的代码,是处于执行期程序以及其相关资源的总称. 2.Linux系统中,对于进程和线程并没有明显的区分,线程是一种特殊的进程. 3.Linux系统中,常用fork()进程创建子进程.调用fork()进程的成之为其子进程的父进程. 4.fork()继承实际上由clone()系统调用实现.最后通过exit()退出执行. 3.2任务描述符及任务结构 1.任务队列实质上

人月神话阅读笔记—第三章

人月神话阅读笔记-第三章 一个由一流人才组成的小型的精干的队伍比由一群平庸的程序员组成的大型团队更有效率,但是这里面有一个重要的问题:如何在有意义的进度安排内创建大型的系统. 优秀的程序员和较差的程序员之间生产效率的差距是巨大的,当一个10人的精干团队进行开发,和一个100个人的平庸程序员进行开发,前者的效率更高.但是对于效率和概念的完成性来说,最好由少数干练人员开发,而大型系统需要大量人员进行开发,但是这两者是有矛盾的,需要进行平衡. 在开发过程中,可以使用一种崭新的开发方案,类似于外科医生做

《Linux Shell脚本攻略》 笔记 第三章:文件操作

<Linux Shell脚本攻略> 笔记 第三章:文件操作 1.生产任意大小的文件 [[email protected] dd_test]# [[email protected] dd_test]# dd if=/dev/zero of=junk.data bs=1k count=10 10+0 records in 10+0 records out 10240 bytes (10 kB) copied, 0.00137023 s, 7.5 MB/s 2.文件系统相关测试 [ -f $file

Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Action 演示模式 3.2 Android Studio使用进阶 操作与导航 快速重构 代码模板 内置模板 自定义代码注释模板 代码分析 在Andr

《从0到1》笔记 第三章 所有成功的企业都是不同的

第三章 所有成功的企业都是不同的----科技企业的创新就是为了垄断,成功的科技企业都是垄断式的. 在商界,钱就是一切,或至少是非常重要.垄断者除了想着赚钱外还有余力想其它事情,而非垄断者就不行.在完全竞争中,企业着眼于短期利益,不可能对未来进行长期规划.要想企业从每日的生成竞赛中解脱出来,唯一的方法就是:获取垄断利润. 企业成功的原因各有不同:每个垄断企业都是靠解决独一无二的问题而获得垄断地位:而企业失败的原因却相同:它们都无法逃脱竞争. 国内的垄断者,如百度,解决了中文搜索的问题,垄断了搜索的