C++新标准库提供了很多新功能,它们更加强大和易用. tuple类型 tuple是一种类似pair的模板,pair可以用来保存一对逻辑上有关联的元素对.但与pair不同的是,pair只能存储两个成员,而tuple则对成员数量没有限制.虽然tuple可以存储任意多个元素,但一个具体的tuple一次只能存储固定数量的成员.就像一个容器一样,它可以容纳多少个元素由用户指定,但一旦指定后就不能更改了.…
17.1 tuple类型 tuple是类似pair的模板: pair和tuple的成员类型都可以不相同 pair恰好有两个成员,tuple可有任意数量的成员 按照不同参数数量和类型实例化出的tuple是不同类型 tuple类型及其伴随类型和函数都在头文件tuple中 17.1.1 定义和初始化tuple 定义一个tuple时,需要指出每个成员的类型.它们是模板参数,故必须在编译期确定 创建tuple对象时,可使用tuple的默认构造函数,它会对每个成员值初始化.也可为每个成员提供初始值.tupl…
IO类对象不允许进行拷贝操作. IO类中定义后一些函数和标志,可以用于访问和操作流的状态. 一旦流发生错误,后续IO操作都是失败的. 读写IO对象会改变IO对象的状态. 每个输出流都管理一个缓冲区. 缓冲被刷新的原因有如下几种: 1.程序正常结束. 2.缓冲区满 3.endl刷新缓冲区 4.使用操作符unitbuf 5.被关联到另一个流 输入或输出流可以被关联到另一个输出流,不允许关联到输入流. 每个流最多同时关联到一个流,一个流可以被多个流关联. 文件流是将抽象流与文件关联起来,对流的操作就能…
第17 章 数学库 在这一章中(以下关于标准库的几章中相同)我的主要目的不是对每个函数给出完整地说明,而是告诉你标准库可以提供什么功能.为了可以清楚地说明问题,我可能 会忽略一些小的选项或者行为.基本的思想是激发你的好奇心,这些好奇之处可能在參考于冊中找到答案. 数学库由算术函数的标准集合组成.比方三角函数库(sin, cos, tan, asin, acos, etc.), 幂指函数(exp, log,  log10),舍入函数(floor,  ceil).max.min.加上一个变量 pi.…
除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 vector 可用于保存一组指定类型的对象 bitset,提供了一种抽象方法来操作位的集合.与整型值上的内置位操作符相比,bitset 类类型提供了一种更方便的处理位的方式. 第二章所涉及的类型都是低层数据类型:这些类型表示数值或字符的抽象,并根据其具体机器表示来定义. 除了这些在语言中定义的类型外,…
1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器(container). 详细介绍:(1)矢量:具有方向性的量. (2) 编程语言方面:vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确.它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对…
1. 标准库类型 string string表示可变长的字符序列,使用string必须首先包含string头文件.如何初始化类的对象是由类本身决定的. int n; string s1;//默认初始化,s1是空字符串 string s2(s1);//s2是s1的副本,等价于string s2 = s1; string s3("value");//s3是字面值"value"的副本,除了字面值后面的那个空字符外,等价于string s3 = "value&qu…
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对象和字符串字面值的连接:+操作符的左右操作数必须至少一个是s…
*****代码在Ubuntu g++ 5.31 / clang++ 3.8(C++11)下编写调试***** 每个C++程序必须有一个main( )函数,main( )函数的返回值也必须是int类型,操作系统通过调用main( )函数来运行C++程序. 1.函数格式 函数:C++的函数是一个能够完成一个功能的模块或者说是一段命名了的代码块. 完整函数的组成: ①返回类型:不一定有返回值,故不一定有返回类型 ②函数名:根据名字标识完成特定功能的模块,必须存在 //lambda匿名函数除外 ③形参列…
练习12.1:在此代码的结尾,b1 和 b2 各包含多少个元素? StrBlob b1; { StrBlob b2 = {"a", "an", "the"}; b1 = b2; b2.push_back("about"); } b2被销毁,b1包含4个元素. 练习12.2:编写你自己的StrBlob 类,包含const 版本的 front 和 back. const string& StrBlob::front() c…
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容器中.我们将在下一章中看到,关联容器更适合这个问题.(b) 读取未知数量的单词,总是将单词插入到末尾.删除操作在头部进行.(c) 从一个文件读取未知数量的整数.将这些数排序,然后将它们打印到标准输出.(a)应该使用array,因为单词的数量是固定的,也就是说元素的个数是固定的,因此符合array的特…
正如第一章所说:C++的函数是一个能够完成一个功能的模块或者说是一段命名了的代码块. 如下图所示,函数可以重载,是一段实现某些功能命名了的代码. 一个完整的函数的构成有四部分: 1.返回类型 2.函数名 3.形参 4.函数体 对于返回类型来说,return语句返回的类型必须和返回类型一致,或者可以转换. 对于函数名来说,允许多个函数使用相同的名字,当参数不同时,形成重载.对函数名使用调用运算符,则执行函数. 对于形参来说,可以是传值的,也可以是传引用的. 对于函数体来说,必须是在一对花括号包围的…
*****代码在Debian g++ 5.40 / clang++ 3.8(C++11)下编写调试***** 本章主要是关于字符串.数组的内容,以及一些简单的容器知识. 1.using的声明 using关键字有2种用法: using std::cin; //这种叫做using声明,注意分号 using namespace std;     //这种叫做using指示,注意分号 两者的区别是一个using声明一次只引入一个std的成员,而using指示则将整个命名空间的所有成员都引入. 头文件不要…
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声明什么,最好不使用这个偷懒的写法 问题2:C++定义了一个内容丰富的抽象数据类型的标准库,最重要的两个标准库类型是string和vector 因为他们是c++基本内置类型基础上改进而来,故重要!前者支持变长字符串,后者可以保存一组指定类型的对象. 问题3:什么时候会调用默认的构造函数? 默认构造函数…
练习10.1:头文件algorithm中定义了一个名为count的函数,它类似find,接受一对迭代器和一个值作为参数.count返回给定值在序列中出现的次数.编写程序,读取int序列存入vector中,打印有多少个元素的值等于给定值. #include <iostream> #include <algorithm> #include <vector> int main() { std::vector<, , , , , , , , , }; std::cout…
文章17章 进.输出和文件 1.当到达输入句子.他将刷新输出缓冲区满输出电流 2.streambuf分类 它提供了用于各种操作的一个缓冲 ios_base类表示流的一般特征 ios基础的类ios_base.它包括一个点streambuf对象的指针 ostream类从ios派生.提供可输出方法 istream类从ios派生,提供可输入方法 iostream类基于ostream和istream,继承了输入和输出方法 3.包括iostream则自己主动创建了8个流对象 cin 标准输入 wcin 宽字…
当运算符作用域类类型的对象时,可以通过运算符重载来重新定义该运算符的含义.重载运算符的意义在于我们和用户能够更简洁的书写和更方便的使用代码. 基本概念 重载的运算符是具有特殊名字的函数:函数名由关键词operator和跟运算符号组成. 和普通函数相同,重载的运算符也包含返回值.形参列表和函数体.运算符函数的参数和该运算符的作用对象数量一样多.一元运算符只有一个参数,二元运算符有两个.对于二元运算符来说,第一个参数对应运算符左侧运算对象,第二个参数对应运算符右侧运算对象.运算符一律不允许含有默认实…
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型(模版) 需要处理二进制位的时候,可以使用c++标准库提供的bitset类型,它也是类模版,类似vectro容器,唯一不同的是,bitset类型需要说明长度,使用常量表达式给出的整型字面值或者已经初始化的cosnt对象. bitset<> bit;//从0到31位算的,bit的32位每位初始化为0…
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin…
1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using namespace std; int main() { bool b = 10; bool b1 = true; bool b2 = false; cout << b << endl; cout << b1 << endl; cout << b2 <…
标准库 string 类型 string 类型支持长度可变的字符串.C++ 标准库将负责管理与存储字符相关的内存,以及提供各种实用的操作.标准库string 类型的目的就是满足对字符串的一般应用. 与其它的标准库类型一样,用户程序要使用 string 类型对象.必须包括相关头文件.假设提供了合适的 using 声明,那么编写出来的程序将会变得简短些: #include <string> using std::string; 1.1 string 对象的定义和初始化 string 标准库支持几个…
C++ tuple(元组) tuple是C++11新标准里的类型.它是一个类似pair类型的模板.pair类型是每个成员变量各自可以是任意类型,但是只能有俩个成员,而tuple与pair不同的是它可以有任意数量的成员.但是每个确定的tuple类型的成员数目是固定的. 声明如下 tuple<int,int,float> tp(1,2,6.2); 取值 cout << get<0>(tp) << endl; //输出1 cout << get<…
    原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3911534.html…
面向对象程序设计的核心思想是:数据抽象.继承和动态绑定. 数据抽象:将类的接口与实现分离: 继承:定义相似类型并对相似关系建模: 动态绑定:一定程度上上忽略相似类型间的区别,用同一方式使用它们. 1.继承 通过继承联系在一起的类构成层次关系.层次关系的最底层或者说根部叫做基类,直接或者间接从基类继承而来得到的类叫做派生类. 基类负责定义该层次上共有的特性,派生类在基类的基础上根据自身需求进行扩展. 在面向对象程序设计的继承中,基类将需要进行扩展的函数与原封不动直接继承的函数进行区分对待.需要进行…
类的基本思想是数据抽象和封装,定义类就是定义一个抽象数据类型. 类中的所有成员必须在类中声明,也即默认定义在类中的成员全部为声明,除非显式的定义成员函数的函数体.成员函数是在类中声明的,定义可以在类内,也可以在类外,在类内定义时,为隐式内联,对于内联函数允许放在头文件,被多次定义. 在类的普通成员函数体内,成员函数是使用隐式的this指针来识别具体对象的.this指针是隐式定义的,在类内任何地方都不允许再次定义名为this的变量. 对于一个具体对象来说,它内部的this指针是const的,即是个…
表达式是运算对象及运算符组成的式子,表达式求值将得到一个结果,单独的变量或者字面值也算表达式,结果是其本身. 运算符分为:一元运算符.二元运算符.三元运算符.一元即一个作用对象,二元两个作用对象,以此类推. 函数调用是一种特殊的运算符(此运算符无作用对象数量限制) 它的运算形式为: primary-expression ( expression-list ) 对于expression-list来说,其数量不限,因此说函数调用运算符对运算对象的数量没有限制. 左值和右值:这两个名词是从C语言中继承…
*****代码在Debian g++ 5.3.1 / clang++ 3.8(C++11)下编写调试***** 由于部分编译器对标准遵循的不同以及自身额外的扩展,本章书中的少数知识点与实际实现存在偏差情况,在实际调试中存在差异时,以书本为准. 1.基本数据类型 计算机世界中的类型有很多,但是基本类型就那么几种,有基本数据类型,媒体类型,设备类型等,目前只学习数据类型.. 基本数据类型包括算术类型和空类型,算术又分为整数和浮点数(即小数).字符和布尔类型从属于整数,bool类型是C++内置类型,但…
第二部分提供了更高级的模块用来支持专业编程的需要.这些模块很少出现在小型的脚本里. 1. 输出格式化reprlib 模块提供了一个用来缩写显示大型或深层嵌套容器的 定制版repr() . >>> import reprlib >>> reprlib.repr(set('supercalifragilisticexpialidocious')) "{'a', 'c', 'd', 'e', 'f', 'g', ...}" pprint模块为 打印对解释器…
1. 操作系统接口 os 模块提供很多函数与操作系统进行交互︰ >>> import os >>> os.getcwd() # 返回当前的工作目录 'C:\\Python35' >>> os.chdir('/server/accesslogs') # 修改当前的工作目录 >>> os.system('mkdir today') # 执行系统命令 mkdir 0 确保使用import os而不是from os import *.这样可以…
模板是C++中泛型编程的基础,一个模板就是创建一个类或者函数的蓝图或者说公式. C++模板分为函数模板和类模板. 类模板则可以是整个类是个模板,类的某个成员函数是个模板,以及类本身和成员函数分别是不同的模板. 1.函数模板 函数模板以关键字template开始,后接尖括号括起来的模板参数列表,模板参数列表不允许是空的,也即模板参数至少有一个或多个,多个之间使用逗号分割. 模板参数表示的是函数中用到的类型或者是一个值.当我们使用模板时,根据提供的实参推断出实参的类型,该类型即被用于绑定到模板参数,…