随笔分类 -  c++primer

摘要:定义、实例化函数模板: 对于函数体完全相同,唯一差异就是参数类型的情况,我们可以定义一个通用的函数模板,而非为每个类型都定义一个新函数: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 template <ty 阅读全文
posted @ 2018-02-27 23:22 geloutingyu 阅读(467) 评论(0) 推荐(0)
摘要:当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内。如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义 在编译时进行名字查找: 一个对象、引用或指针的静态类型决定了该对象的哪些成员是可见的,即使静态类型与动态类型不一致: 1 #include <io 阅读全文
posted @ 2018-02-24 15:45 geloutingyu 阅读(597) 评论(0) 推荐(0)
摘要:通常情况下,如果我们不适用某个函数,则无需为该函数提供定义。但我们必须为每个虚函数都提供定义而不管它是否被用到了,这因为连编译器也无法确定到底会适用哪个虚函数 对虚函数的调用可能在运行时才被解析: 当某个虚函数通过指针或引用调用时,编译器产生的代码直到运行时才能确定应该调用哪个版本的函数。被调用的函 阅读全文
posted @ 2018-02-18 21:43 geloutingyu 阅读(558) 评论(0) 推荐(0)
摘要:面向对象程序设计基于三个基本概念:数据抽象,继承和动态绑定 数据抽象是一种依赖于接口和实现分离的编程技术。继承和动态绑定对程序的编号有两方面的影响:一是我们可以更容易地定义与其它类相似但不完全相同的类;二是在使用这些彼此相似的类编写程序时,我们可以在一定程度上忽略掉它们的区别。 在 c++ 语言中, 阅读全文
posted @ 2018-02-17 22:32 geloutingyu 阅读(509) 评论(0) 推荐(0)
摘要:在对象拷贝后就立即被销毁的情况下,移动而非拷贝对象会大幅度提升性能。以及像 IO 类或 unique_ptr 这样的类,包含不能被共享的资源,不能拷贝但可以移动。而标准库容器、string 和 shared_ptr 类既支持移动也支持拷贝 右值引用: 右值引用是 c++11 为了支持移动操作引入的。 阅读全文
posted @ 2018-02-11 21:50 geloutingyu 阅读(460) 评论(1) 推荐(0)
摘要:为了定义拷贝构造函数和拷贝赋值运算符,我们首先必须确认此类型对象的拷贝语义。通常可以定义拷贝操作,使类的行为看起来像一个值或者像一个指针(即所谓的深拷贝和浅拷贝) 类的行为像一个值,意味着它应该也有自己的状态。当我们拷贝一个像值的对象时,副本和原对象是完全独立的。改变副本不会对原对象有任何影响,反之 阅读全文
posted @ 2018-02-05 23:38 geloutingyu 阅读(309) 评论(0) 推荐(0)
摘要:拷贝控制操作即对象的拷贝,移动,赋值和销毁。一个类通过拷贝构造函数,拷贝赋值运算符,移动构造函数,移动赋值运算符和析构函数来完成这些工作。拷贝和移动构造函数定义了当用相同类型的另一个对象初始化本对象时做什么。拷贝和移动运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销 阅读全文
posted @ 2018-02-05 16:52 geloutingyu 阅读(663) 评论(0) 推荐(0)
摘要:在 c++11 中提供了两种一次分配一个对象数组的方法。其一是使用一种 new 表达式语法,其二是使用一个名为 allocator 的类。虽然通常我们更希望用容器来代替数组(使用容器的类可以使用默认版本的拷贝、赋值和析构操作。分配动态数组的类则必须定义自己版本的操作,在拷贝、复制以及销毁对象时管理所 阅读全文
posted @ 2018-02-02 16:13 geloutingyu 阅读(434) 评论(0) 推荐(0)
摘要:静态内存用来保存局部 static 对象、类 static 数据成员 以及任何定义在函数之外的变量。栈内存用来存储定义在函数内部的非 static 对象。分配在静态或栈内存中的对象由编译器自动创建和销毁。对于栈对象,仅在其定义的程序块运行时才存在;static 对象在使用之前分配,在程序结束时销毁。 阅读全文
posted @ 2018-01-31 20:10 geloutingyu 阅读(553) 评论(0) 推荐(0)
摘要:关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保持和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。和顺序容器一样的是,关联容器也是模板 关联容器类型: 按关键字有序保存元素 map 关联数组:保存关键字-值对 set 关键字即值,即只保存关键字的容器 m 阅读全文
posted @ 2018-01-29 14:39 geloutingyu 阅读(322) 评论(0) 推荐(0)
摘要:除了为每个容器定义的迭代器之外,标准库在头文件 iterator 中还定义了额外几种迭代器。这些迭代器包括以下几种: 插入迭代器:这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器:这些迭代器被绑定到输入或输出流上,可用来变量所有管理的 IO 流 反向迭代器:这些迭代器向后而不是向前移动。 阅读全文
posted @ 2018-01-25 20:35 geloutingyu 阅读(453) 评论(0) 推荐(0)
摘要:lambda 表达式: Lambda表达式完整的声明格式如下: 各项具体含义如下: 我们这里先不讨论 exception 我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体: 1 #include <iostream> 2 using namespace std; 3 4 int mai 阅读全文
posted @ 2018-01-24 22:18 geloutingyu 阅读(4261) 评论(0) 推荐(0)
摘要:泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作。因此算法可能改变容器中保存的元素,也可能在容器内移动元素,但永远不会直接添加或删除元素。 只读算法: accumulate: 1 #include <iostream> 2 #include <algorithm> 3 #i 阅读全文
posted @ 2018-01-22 21:07 geloutingyu 阅读(270) 评论(0) 推荐(0)
摘要:以下内容转自:https://www.cnblogs.com/QG-whz/p/5152963.html 阅读目录 0.前言 1.容器概论 2.std::array 2.1.底层数据结构 2.2.内存分配策略 2.3.array的优势在哪 3.forward_list 3.1.底层数据结构 3.2. 阅读全文
posted @ 2018-01-21 19:04 geloutingyu 阅读(296) 评论(0) 推荐(0)
摘要:顺序容器类型: vector 可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 deque 双端队列。支持快速随机访问。在头尾位置插入/删除速度很快 list 双向列表。只支持双向顺序访问。在 list 中任何位置进行插入/删除操作速度都很快 forward_list 单向链表 阅读全文
posted @ 2018-01-19 22:35 geloutingyu 阅读(252) 评论(0) 推荐(0)
摘要:sstream 头文件定义了三个类型来支持内存 IO,这些类型可以向 string 写入数据,从 string 读取数据,就像 string 是一个 IO 流一样。 istringstream 从 string 读取数据,ostringstream 向 string 写入数据,stringstrea 阅读全文
posted @ 2018-01-12 18:48 geloutingyu 阅读(192) 评论(0) 推荐(1)
摘要:除了继承自 iostream 类型的行为之外,fstream 中定义的类型还增加了一些新的成员来管理与流相关的文件。我们可以对 fstream,ifstream 和 ofstream 对象调用这些操作,但不能对其他 IO 类型调用这些操作: 使用文件流对象: ifstream in(ifile);/ 阅读全文
posted @ 2018-01-11 22:14 geloutingyu 阅读(266) 评论(0) 推荐(0)
摘要:IO类: iostream 定义了用于读写流的基本类型,fstream 定义了读写命名文件的类型,sstream 定义了读写内存 string 对象的类型。 IO 库类型和头文件: 头文件 类型 iostream istream,wistream 从流读取数据 ostream,wostream 向流 阅读全文
posted @ 2018-01-11 16:40 geloutingyu 阅读(504) 评论(1) 推荐(0)
摘要:声明静态成员: 通过再成员之前加上关键字 static 使得其与类关联在一起。和其他成员一样,静态成员可以是 public 的或 private 的。静态数据成员的类型可以是常量,引用,指针,类类型等。 我们定义一个类,用来表示银行的账户记录: 类的静态成员存在于任何对象之外,对象中不包含任何与静态 阅读全文
posted @ 2018-01-06 21:11 geloutingyu 阅读(331) 评论(0) 推荐(0)
摘要:聚合类: 聚合类使得用户可以直接访问其成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说它是聚合类: 1.所有成员都是 public 的 2.没有定义任何构造函数 3.没有类内初始值 4.没有基类,也没有 virtual 函数 如: 注意:初始值的顺序必须与声明的顺序一致,否则会出现 阅读全文
posted @ 2018-01-06 13:59 geloutingyu 阅读(439) 评论(0) 推荐(0)