
C++
文章平均质量分 65
东阳z
从大数据到深度学习到C++到Java
展开
-
记录第一次写Makefile文件
先将文件记录在此,以后再来总结 Makefile 的写法楼主目前正在将 ravel 的java版本改写为C++ 版本,每次需要写很长的 gcc 命令,想到用 make 来代替GCC 的命令行。公共部分的MakefileCXXFLAGS = -g -I /home/san/eclipse-workspace/ratel/landlords-common -pthread -L/home/san/apps/build/debug-install-cpp11/libLDFLAGS = -lboost_原创 2021-03-13 15:34:00 · 147 阅读 · 0 评论 -
C++空间配置器 Allocator
东阳的学习笔记空间配置器代表一种特定的内存模型,并提供一种抽象概念,以便将对内存的申请最终转化为对内存的直接调用。应用程序开发者如何使用配置器就应用程序员来说,只需要传入一个 template 参数就可以了。程序库开发者如何使用配置器配置器提供了一个接口,包括分配、生成、销毁和回收对象。a.allocate(num) 为 num 个元素分配内存b.construct§ 将 p 所指的元素初始化destroy§ .原创 2021-01-15 13:21:56 · 230 阅读 · 0 评论 -
C++ Stream Classes 之 Stream Buffer Classes
东阳的学习笔记stream 并不负责实际的读写操作, 而是委托给 stream buffer 完成从使用者的角度看 Stream 缓冲区对于 stream 的使用者来说,class basic_streambuf 只是发送、提取字符的地方。streambuf定义了两个public函数,用来写入字符:sputc© 将字符 c 送入 stream 缓冲区 如果发生错误,返回eofsputn(s, n) 将字符序列 s 中的 n 个字符送入 stream 缓.原创 2021-01-15 12:50:09 · 403 阅读 · 0 评论 -
C++Stream Classes详解
东阳的学习记录基本概念Stream 类别class istream ;用来读数据class ostream :用来写数据全局性的 Stream 对象IOStream定义了数个型别为 istream 和 ostream的全局对象,它们对应于标准的 I/O 通道(channels):cin:标准输入通道,对应C stdin。操作系统通常将它和键盘连接cout:标准输出通道,对应C stdout。操作系统通常将它和监视器连接cerr:标准错误输出通道,对应C stderr。无缓冲装置.原创 2021-01-14 21:54:37 · 986 阅读 · 0 评论 -
转载:C++ STL排序算法
东阳的学习笔记原文链接:https://www.cnblogs.com/cloudplankroader/p/10434931.html在介绍排序算法前,先说明一个可以称为排序准则的东西,也就是定义strict weak ordering,其意义如下:1.必须是非对称的,对operator < 而言,如果x<y是true,则y<x为false。对判断式op()而言,若op(x,y)为true,则op(x,y)为false。2.必须是可传递的,对operator < 而言,.转载 2021-01-14 16:26:23 · 231 阅读 · 0 评论 -
C++之仿函数与配接器bind
东阳的学习笔记所谓仿函数,是一个定义了 operator()的对象。仿函数的三大妙处仿函数比一般函数更灵巧,因为它可以拥有状态每个仿函数都有其类别。因此你可以将仿函数作为 template 参数来传递,从而指定某种行为模式。此外还有一个好处:容器类别也会因为仿函数的不同而不同仿函数的执行速度比函数指针更快一个拥有内部状态的仿函数例子如果要保存状态,则需以reference传递参数, 或者使用 for_each 的返回值(没错,for_each返回操作)./* * genera2..原创 2021-01-14 16:16:19 · 182 阅读 · 0 评论 -
C++ 中逆向迭代器详解
C++中逆向迭代器C++的设计者在设计逆向迭代器时运用了一个小技巧:他们实际上倒置了“半开原则”。逆向迭代器所定义的区间,实际上并不包括起点,反倒是包括了终点。而逻辑上的行为却一如常态,原因是:逻辑上所指的元素为迭代器所指位置的下一个位置,如下图:逆向迭代器做逆序处理/* * reviter4.cpp * * Created on: 2021年1月9日 * Author: san *//* * 使用逆向迭代器,将两个迭代器所指区间作逆序输出 * 使用base() 将逆原创 2021-01-09 20:07:27 · 979 阅读 · 0 评论 -
C++中各种容器的选择
c++ 标准容器库提供了各具特长的不同容器 该如何选择最佳的容器?vector: 缺省情况下应该使用vector vector的内部结构最简单,并且允许随机存储,所以存储数据非常方便灵活,数据处理也很快deque: 如果经常在序列头部和尾部安插和移除元素,应该采用deque。如果你希望元素被移除时,容器内存能自动缩减,那么应该使用deque 。此外vector通常使用一个内存区块存放元素,deque采用多个区块,所以可以包含更多的元素list: 如果经常在容器中段操作元素移动,删除,安插,原创 2021-01-09 19:51:46 · 509 阅读 · 1 评论 -
STL扩展——编写自己的 STL 容器
东阳的学习笔记你可以使用字符串或数组作为 STL 容器, 也可以自行撰写特殊容器以满足特殊需求。如果你自行撰写容器, 仍可从诸如排序、合并算法中受益。此即 开放型封闭原则。将自定义的容器 “STL化” 的三种不同方法The invasive approach (侵入式作法)直接提供 STL 容器的所需接口。 这种做法需要以特定方式编写容器,所以是侵入性的。The noninvasive approach (非侵入式作法)由你撰写或提供特殊的迭代器, 作为算法和特殊容器间的界面。他需要的只是 .原创 2021-01-08 20:39:30 · 391 阅读 · 0 评论 -
effective c++ 09 —— 杂项讨论
东阳的学习记录条款53:不要轻忽编译器的警告严肃对待编译器发出的任何警告,争取做到没有任何警告不要依赖编译器的报警能力,不同编译器对待事情的态度并不相同条款54:让自己熟悉 TR1 在内的标准库程序https://blog.youkuaiyun.com/unirrrrr/article/details/81713132条款55:让自己熟悉BoostBoost是一个社群,致力于免费、源码开放,同僚复审的C++标准程序库开发Boost提供许多 TR1 组件实现品,以及其他许多程序库...原创 2021-01-05 13:52:27 · 162 阅读 · 0 评论 -
effective c++ 08 ——定制 new/delete
东阳的学习笔记多线程环境下的内存管理遭受单线程系统不曾有过的挑战。STL所使用的heap内存是由容器所拥有的分配器对象(allocator objects)管理条款49:了解new-handler的行为当operator new 抛出异常以反映一个未获满足的内存需求之前,它会先调用一个客户指定的错误处理函数,一个所谓的 new-handler。为了指定这个 “用以处理内存不足的”函数,客户必须调用 set_new_handler,其声明于头文件 。namespace std { .原创 2021-01-05 13:44:00 · 172 阅读 · 0 评论 -
effective c++ 07 ——模板与泛型编程
东阳的学习记录模板元编程:在C++编译期内执行并于编译完成时停止执行的程序。条款41:了解隐式接口和编译期多态面向对象(classes)总是以显示接口和运行期多态解决问题templates 接口是隐式的。多态通过 templates 具现化 和函数重载解析发生于编译期条款42:了解 typename 的双重意义声明 templates 参数时,class 与 typename 一模一样接受一个STL为参数的模板 func 无法通过编译C++假定域名作用符不是类型,必须使用typen.原创 2021-01-05 10:52:27 · 158 阅读 · 0 评论 -
effective c++ 06 --继承与面向对象设计
东阳的学习记录条款32:确定你的public继承塑模出 “is-a”关系正方形并不是矩形“is-a”意味着:适用于base class 身上的每一件事情也一定适用于 derived class 。条款33:避免遮掩继承而来的名称如果你正在使用 public 继承,又不继承那些重载函数,就是违反了 is-a适用using声明,使得 base 的函数可见在private继承下,是可以不满足 is-a 关系的使用 转交函数 继承某个特定版本条款34:区分接口继承与实现继承缺省的 .原创 2021-01-04 21:12:31 · 100 阅读 · 0 评论 -
effective c++ 05 --实现(implementations)
东阳的学习记录条款26:尽可能延后变量定义式的出现时间程序控制流到达这个变量定义式时,需承担构造成本,离开作用域时,承担析构成本避免定义 “不使用的变量”。尽可能延后,直到非得到使用前才定义,甚至应该尝试延后这份定义直到能够给他初始实参为止。条款27:尽可能少做转型动作转型在继承体系中表现为,有一个偏移量(offset)在运行期被施加到了 Derived* 指针上。在继承体系中对派生类进行强转为base,会生成一个 “*this对象之base class”副本,这样做会导致原对象的b.原创 2021-01-04 20:14:37 · 148 阅读 · 0 评论 -
effective c++ 04 --设计与声明
东阳的学习记录条款18:让接口容易被正确使用、不易被误用接口设计要清晰无歧义,能让用户知晓每一个参数的含义以及使用目的、方法“促进正确使用” 的方法包括接口的一致性,以及与内置类型的行为兼容“阻止误用” 的方法有:i 建立新类型、限制类型上的操作ii 束缚对象值iii 消除客户的资源管理责任shared_ptr 支持定制型删除器。这可防范DDL问题,可被用来自动解除互斥锁等等条款19:设计 class 犹如设计 type新 type 如何创建和销毁?对象的初始化和复制有何区别.原创 2021-01-01 22:24:07 · 115 阅读 · 0 评论 -
effective c++ 03 --资源管理
东阳的学习笔记条款13:以对象管理资源记住 delete 并不能确保执行,但析构函数一定会被执行将资源放入管理对象中同一管理,使用析构函数确保对象被删除auto_ptr 和 引用计数智能指针某些特殊场合需要设计自己的资源管理类。条款14:在资源管理类中小心 copying 行为RAII: 在构造函数中获取资源,并在析构函数中释放资源当一个RAII对象被复制的时候,有以下几种策略:i. 禁止复制ii. 对底层资源使用 “引用计数法”iii. 进行深度拷贝iv. 转移底部资源的.原创 2021-01-01 21:28:10 · 116 阅读 · 0 评论 -
effective c++ 02 --构造/析构/赋值运算
东阳的学习笔记条款5:了解C++默默编写并调用哪些函数C++默认合成一个空构造函数,copy构造和copy运算符(有条件的)若成员变量为引用类型,C++的响应是拒绝编译若class包含引用/const类型,则需要自定义copy操作当成员变量为指针类型时,最好也自定义copy操作记住:编译器可以暗自为class创建default构造函数、copy构造函数、copy赋值、析构函数。但是,往往无法满足需求条款6:若不想使用编译器自动生成的函数,就该明确拒绝在某些特殊场景中,可能并不.原创 2021-01-01 21:05:20 · 229 阅读 · 0 评论 -
effective c++ 01 --让自己习惯C++
东阳的学习笔记条款1: 将C++视为一个语言联邦CObject-Oriented C++Template C++STL记住: C++高效编程守则视状况变化而变化,取决于你使用C++的哪一部分条款2:尽量以const、enum、inline替换 #definedefine不被视为语言的一部分,它由预处理器所管理class内的static常量只有一份,所有类的实例共享#define没有作用域,不提供任何封装性使用#define可以减少函数开销,幸运的是可以使用inline代替.原创 2021-01-01 16:47:53 · 117 阅读 · 0 评论 -
C++primer代码
东阳的学习记录上传到码云上了(全手打加注释),链接如下:CppPrimer原创 2020-12-18 22:18:47 · 265 阅读 · 1 评论 -
C++ Primer(5)高级主题
东阳的学习记录第17章(标准库特殊设施)没啥需要注意的,这章知识一些工具tuplebitset正则表达式随机数IO库再探第18章异常处理析构函数不应该抛出不能被它自身处理的异常throw语句抛出的局部变量在catch之前就已经被释放throw语句中,静态类型决定异常类型,注意throw抛出基类指针时(自定义异常类)异常和catch的匹配规则受到很多限制:(只有以下三种被允许)i. 允许从非常量到常量的类型转换ii. 允许派生类向基类的类型转换iii. 允许指针转换(.原创 2020-12-18 22:16:09 · 185 阅读 · 1 评论 -
C++ primer (4)类设计者的工具
东阳的学习笔记第13章(拷贝控制)拷贝构造函数通常不定义为ecplict赋值运算符返回左侧对象的引用隐式销毁一个内置指针不会delete它所指向的内容(指针/引用离开作用域时,析构函数不会执行)如果一个类需要自定义析构函数,那么可以肯定它也需要自定义拷贝/赋值将拷贝构造和拷贝赋值定义为delete,可以防止拷贝(例如iostream)当不可能拷贝、赋值、销毁时就定义为删除的(const成员, 引用成员)移动构造/拷贝定义为 noexcept (both .h and .cpp)移动迭.原创 2020-12-18 21:04:55 · 186 阅读 · 2 评论 -
C++ primer(3) 标准库
东阳的学习笔记第8章(IO库)程序崩溃后输出缓冲区不会刷新,而且有时会出现缓冲区不刷新的问题,建议手动刷新std::flush;打开一个文件流之后,使用if判断文件是否被正确打开fstram对象销毁时会自动调用close关闭文件流使用oftream打开文件时若不指定app/in模式,默认删除文件内容第9章只有顺序容器的构造函数才接受大小参数内置数组不允许拷贝赋值赋值相关运算符会使迭代器失效除array外,swap不对任何元素进行拷贝、删除、插入操作容器大小比较,先比长度,在比.原创 2020-12-18 16:21:03 · 128 阅读 · 4 评论 -
C++Primer基础部分总结(2)
东阳的学习记录第五章:语句给空语句加上注释多余的空语句并非总是无害的switch语句中的case标签必须是整型常量表达式任何两个case标签的值不能相同case分支后若没有break,最好注释说明如果某个case分支需要定义局部变量,请把局部变量置于{块}内(为了防止出现未初始化就使用的情况)while循环的循环变量的作用域,在循环退出后仍可以访问。...原创 2020-11-18 12:28:02 · 114 阅读 · 0 评论 -
C++ Primer - 基础部分总结(1)
东阳的学习笔记原创 2020-11-15 15:23:22 · 134 阅读 · 0 评论