primer

你有一份新的C++书单,请注意查收!

只愿长相守 提交于 2020-10-27 17:52:18
​ C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 作为一个Java工程师,学习C++的门槛并不算低,C++从来没有虚拟机,没有垃圾回收,在Java里不需要考虑的各种技术细节,在C++里都需要关心和处理,比如手动分配内存。 如果是C++工程师转型做Java,则是明显的降维打击,你再也不需要考虑内存的管理,不需要深入底层去做编程,仅仅把它们当成系统自带的类库就好了。今天我们就来推荐几本C++的经典书籍吧。 C++系列书单 ​ C++ Primer Plus C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言,是C语言的超集。《C++ Primer Plus(第6版)(中文版)》是根据2003年的ISO/ANSI C++标准编写的。 通过大量短小精悍的程序详细而全面地阐述了C++的基本概念和技术。全书分为18章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元

震惊!一男学生休息铃后不回宿舍,竟来到漆黑的走廊里...

隐身守侯 提交于 2020-10-24 07:57:53
在走廊里睡觉没有枕头是怎么回事呢? 走廊和枕头相信大家都很熟悉,但是在走廊里睡觉没有枕头是怎么回事呢? 下面就让小编为大家分享一下在走廊里睡觉没有枕头应该枕什么吧。 地板砖 地板砖相信大家都很熟悉,无论是家里,学校里,医院里,太平间里都有地板砖。 大家都知道,地板砖一般是瓷制的或者是木质的,这些材料都非常的硬。 如果睡觉的时候枕着地板砖,会非常咯得慌,只是躺下一会就会感觉头晕! 看完这段网友表示:原来这么多年我都睡错了! 一种错误的睡觉方法 C++ Primer 本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C ++。 对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使本书成为C++初学者的最佳指南;对于中高级程序员,本书也是不可或缺的参考书。 虽然它看起来很厚,很适合当做枕头,但是因为它太硬了,虽然头部会被抬高,但是并没有给头部一个舒适的环境。 枕在上面就像枕在地板上一样!小编用亲身经历告诉大家不要用 C++ Primer 当做枕头用! 看完这段,网友表示:简直是不可思议!我用了这么多年C++ Primer竟不知道还有这种用法! 和小编手里的C++ Primer并不是一版的C++ Primer

深入Java volatile关键字

跟風遠走 提交于 2020-10-17 07:26:30
一、高速缓存cache和缓存一致性协议 在阅读本文之前,需要先了解cache的基本原理和缓存一致性协议,可以参考以下文章: [1] Memory Barriers: a Hardware View for Software Hackers (翻译版: https://juejin.im/post/5ea7e1e6f265da7b9f07a628 ) [2] Cache coherency primer 上述两篇文章给出了一致性缓存设计过程中的一些通用的技术和细节,例如 MESI协议,Store Buffer,Store Forwarding,Invalidation Queue,重排序和内存屏障 等概念,需要对这些概念有所理解。 实际处理器的cache系统,比上述文章中介绍的还要复杂的多,在细节上也可能有所不同(例如何时对store buffer进行刷新操作),不过基本思想都是差不多的。可以通过wikichip网站来查看常见处理器的架构,例如下面这个链接就是英特尔Skylake处理器架构处理器的基本架构: https://en.wikichip.org/wiki/intel/microarchitectures/skylake_(client) 。 英特尔处理器使用基于MESI改进得到的 MESIF一致性协议 ,关于该协议,英特尔并没有给出详细的文档

C++ typedef typename 作用

[亡魂溺海] 提交于 2020-10-07 05:10:30
C++ typedef typename 作用 C++的一些语法让人看着费解,其中就有: typedef typename std :: vector <T> ::size_type size_type; 详见《C++ Primer》(第五版)P584 有些不懂的语法有时候虽然知道大概是什么意思,忽略一下就过了其实,不过心里老是膈应,就刨根问底一次吧。 vector::size_type 明白上述语法,首先要先看清 vector::size_type 的意思。参考《STL源码剖析》不难发现,其实: template <class T ,class Alloc=alloc> class vector{ public: // ... typedef size_t size_type; // ... }; 这样就看得很清晰了, vector::size_type 是 vector 的嵌套类型定义,其实际等价于 size_t 类型。 也就是说: vector < int > ::size_type ssize; //就等价于 size_t ssize; 为什么使用typename关键字 那么问题来了,为什么要加上typename关键字? typedef std :: vector <T> ::size_type size_type; //why not? 实际上,模板类型在实例化之前

复试临时练习

五迷三道 提交于 2020-10-05 06:53:43
  由于疫情原因,考研复试安排到15.16两天,对学校前两年的复试真题做了三遍,将C primer Plus也翻看了一下,战线太长,后劲儿不足; 想到初试成绩排到倒数,还是想挣扎一下的。 计算机的内容实在是太多太杂,虽然有一些面试经验,但是这次复试不太一样 // 菲波拉契数前20项和 #include<stdio.h> #define N 20 int main() { int a[N]={ 1 , 1 }; int i,sum= 0 ; for (i= 0 ;i<N;i++ ) { if (i> 1 ) a[i]=a[i- 1 ]+a[i- 2 ]; sum += a[i]; } printf( " 前%d项和为%d " ,N,sum); return 0 ; } View Code // 回文字符串判断 #include<stdio.h> #include < string .h> #define N 100 int huiwen( char * p); int main() { char a[N]; gets(a); int flag; flag = huiwen(a); if (flag) printf( " 回文字符串 " ); else printf( " 非回文字符串 " ); return 0 ; } int huiwen( char * p) { char

信息安全从业者书单推荐(2020.6.28更新)

馋奶兔 提交于 2020-10-03 08:01:28
近来也读过不少书,推荐几本个人觉得不错的: 《Vue.js项目开发实战》张帆 《我的第一本算法书》【日】宫崎修一;石田保辉,入门书籍,无代码进行图解 《算法图解:像小说一样有趣的算法入门书》【美】Aditya Bhargava 《编译与反编译技术实战》庞建民 《重构:改善既有代码的设计》【美】Martin Fowler 《Docker技术入门与实战》杨保华;戴王剑;曹亚仑 《一本小小的蓝色逻辑书》【加】布兰登•罗伊尔 《精进:如何成为一个很厉害的人》采铜 最近也买了极客时间上的几门课程,有几门我觉得不错的,虽然没有实体书出版,但课程依然还是按照书籍写作方式来写,比较系统化,有兴趣的也可以看看: 《左耳听风》 《软件工程之美》 《项目管理实战20讲》 不过有一门课是不推荐的,就是《程序员进阶攻略》,后来作者也出了实体书,但总觉得作者对武侠小说过着迷,课程写得有点过于武侠风,技术与武侠关联得过于牵强。 书单均是个人看过或者业界认可的经典书籍,跟网上罗列的安全书单不同,并非把网店上的各安全书籍都罗列上的。如果你有何好书推荐可在 Issues(https://github.com/riusksk/secbook/issues) 上提交,或者提交合并,待我看过之后,如果觉得可以就会在此处更新,这里也会不定期更新书单。 文末附完整的思维导图,欢迎收藏。 计算机及系统原理 · 《编码

c++ 显示具体化和显示实例化

家住魔仙堡 提交于 2020-10-01 03:16:21
转载 2016-03-30 18:03:00 今天看到c++ primer plus 第8章--函数探幽,其中模版函数一节有2个比较容易搞混的概念: 在此记录以下: ​ 先看模版函数的定义: 个人认为主要是为了节约代码量 ,对不同的类型完成相同的操作,如果使用函数重载的话,对于基本数据类型整形,就有short/int/long/longlong 4种,还不包括unsigned和signed,因此需要大量的重载函数,而内容都是雷同的,浪费复制粘帖的操作。因此采用模版函数来实现。​ 1、使用 template 或​ template 放到函数开头来声明模版。其中typename是新标准,class是为了向前兼容。因此写class较为通用。 ​2、注意模版不能缩短可执行文件长度,在函数调用时,必须依据给出的参数类型由编译器生成实例化的模版函数(称作隐式实例化 instance),即 int add(int a, int b); 因此模版函数只是将程序员要做的事交给了编译器而已。 ​3、模版可以重载,见上图的模版1和模版2、模版3,注意重载是用于改变输入参数类型或增加、减少输入参数个数(后者一般通过缺省参数实现!!)。 我们输入 add(1,2)得到3,并且显示调用模版1;输入 add(1,2,3) 得到6, 调 用模版2;输入 ​ add(1,'A')得到'B', 调用模版3;

Command and Query Responsibility Segregation (CQRS) pattern

☆樱花仙子☆ 提交于 2020-08-18 06:49:46
Command and Query Responsibility Segregation (CQRS) pattern The Command and Query Responsibility Segregation (CQRS) pattern separates read and update operations for a data store. Implementing CQRS in your application can maximize its performance, scalability, and security. The flexibility created by migrating to CQRS allows a system to better evolve over time and prevents update commands from causing merge conflicts at the domain level. The problem In traditional architectures, the same data model is used to query and update a database. That's simple and works well for basic CRUD operations.

学C语言和C++它有毛关系吗?

大憨熊 提交于 2020-08-17 15:54:13
这是最近一周时间几个读者小伙伴所提的问题,我顺手截了两个图。 实不相瞒,这类问题之前也经常看到,但是我忘了截图了。 每次遇到这种问题,看起来很简单,但是打字一时半会还真说不清,想想今天周末了,写一篇文章来统一聊聊吧,如果小伙伴们有不同看法,也欢迎批评指正,评论区见。 本文在开源项目: https://github.com/hansonwang99/JavaCollection 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中... ” C 语言和 C++ 到底是什么关系? 首先 C++ 和 C 语言本来就是两种 不同的 编程语言,但 C++ 确实是对 C 语言的扩充和延伸,并且对 C 语言提供后向兼容的能力。对于有些人说的 C++ 完全就包含了 C 语言的说法还是有点别扭的。 C++ 一开始被本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)发明时,起初被称为 “C with Classes” ,即「带类的 C 」。很明显它是在 C 语言的基础上扩充了类class等面向对象的特性和机制。但是后来经过一步步修订和很多次演变(如下图所示),最终才形成了现如今这个支持一系列重大特性的庞大编程语言。 就像经典书籍《Effective C++》一开头就说的,现如今我们提到 C++ ,都应该视其为一个庞大的「 语言联邦 」

C++ fill() fill_n() back_inserter 简析

南楼画角 提交于 2020-08-15 15:07:03
fill 和fill_n函数是C++ Primer第十一章泛型算法部分内容,并把它们称为写入元素算法,也就是说这两个函数只能对输入范围内已存在的元素进行写入操作。如果试图对空容器进行fill_n操作,会导致严重的运行错误,所以在对元素进行写入操作时要检查目标的大小是否足以存储要写入的元素。 fill函数的作用是:将一个区间的元素都赋予val值。函数参数:fill(vec.begin(), vec.end(), val); val为将要替换的值。 [cpp] view plaincopy # include <algorithm> fill(vec.begin(), vec.end(), val); //原来容器中每个元素被重置为val fill_n函数的作用是:参数包括 : 一个迭代器,一个计数器以及一个值。该函数从迭代器指向的元素开始,将指定数量的元素设置为给定的值。 注意: 不能在没有元素的空容器上调用fill_n函数,但是可以通过下面的方法改进。 [cpp] view plaincopy fill_n(vec.begin, 10, val); 为了保证算法有足够的元素存储输出数据,我们使用“插入迭代器”(insert iterator),插入迭代器是可以给基础容器添加元素的迭代器。 使用 back_inserter 的程序需要包含头文件#include<iterator>