
C++
文章平均质量分 61
xy_cpp
.程序员的三大浪漫:图形学、编译原理、操作系统
展开
-
[阶段总结]写在C++ Primer Plus后,C++ Primer前
这篇总结分为三个部分一、总结这半年的学习生活情况。二、总结学习C++ Primer Plus的一些收获三、展望一下接下来半年应该如何开展学习工作Ⅰ前半年的学习生活1.参加了一次网易游戏探营活动,认识了司虎虎等众多大神,并与其相互关注了github。2.参加了一次华为软件精英挑战赛,从中学到了很多有用的团队合作的知识。3.参加了学校的摄影公选课,除了课上的外拍,自己还进行了2次外拍活动。无论是拍摄水...原创 2017-06-07 09:17:03 · 9741 阅读 · 6 评论 -
[读书笔记]深度探索C++模型_第三章_Data语意学
当我们写出以下代码并打印出它们sizeof结果:class X{ };class Y : public virtual X{ };class Z : public virtual X{ };class A : public Y, public Z{ };X、Y、Z、A的继承关系如下图所示: sizeof X、Y、Z、A 的结果为 1、8、8、12 在Visual C++ ...原创 2018-06-22 11:35:38 · 218 阅读 · 0 评论 -
[读书笔记]深度探索C++模型_第四章_Function语意学
4.1 Member 的各种调用方式Nonstatic Member Functions编译器内部已将“member函数实例”转换为对等的“nonmember函数实例” 例如float Point3d::magnitude() const{ return sqrt(_x*_x + _y*_y + _z*_z);}会被转换为float magnitude3d(c...原创 2018-06-24 23:15:25 · 199 阅读 · 0 评论 -
[读书笔记]深度探索C++模型_第一章_关于对象
现在仍占有优势的C++对象模型,Nonstatic data members,被配置于每一个class object之内,static data menbers则被存放在个别的class object之外。Static 和 nonstatic function members 也被放在个别的 class object 之外。 需要多少内存才能够表现一个class object?一般而言 -...原创 2018-06-18 20:45:21 · 209 阅读 · 0 评论 -
[读书笔记]深度探索C++模型_第五章_构造、析构、拷贝语意学
5.1“无继承”情况下的对象构造考虑下面这个程序片段:(1) Point global;(2) (3) Point foobar()(4) {(5) Point local;(6) Point *heap = new Point;(7) *heap = local;(8) // ... stuff ...(9) delete heap;(10) return...原创 2018-06-25 16:52:56 · 218 阅读 · 0 评论 -
[读书笔记]C++并发编程实战
[读书笔记]C++并发编程实战原文地址:https://github.com/xuyicpp/multi_threading C++并发编程的内容每一章都从浅入深讲解的很详细,虽然第一遍有一些还不是很懂,例如无锁编程和线程池,以后遇到这些问题可以回来翻翻笔记加深印象。multi_threading《C++并发编程实战》的读书笔记,供以后工作中查阅。第一章何谓并发和多线程...原创 2018-06-11 00:01:46 · 7203 阅读 · 2 评论 -
[读书笔记]深度探索C++模型_第六章_执行期语意学
6.1 对象的构造和析构全局对象一般而言我们会把 object 尽可能放置在使用它的那个程序区段附近,这么做可以节省非必要的对象产生操作和摧毁操作。C++程序中所有的 global objects 都被放置程序的 data segment 中。也就是静态变量区。 局部静态对象const Matrix& identity() { static Matr...原创 2018-06-26 23:20:56 · 256 阅读 · 0 评论 -
[读书笔记]深度探索C++模型_第二章_构造函数语意学
在这一章中,作者要挖掘编译器对于“对象构造过程”的干涉(就是说编译器会对代码做适当的补充),以及对于“程序形式”和“程序效率”上的冲击。所以这一章,主要是编译器会在什么时候对构造函数干什么的概念上的讲解。被合成的default constructor只满足编译器的需要,而不是程序的需要。如果有多个class member object都要求constructor初始化操作,将如何?C+...原创 2018-06-20 13:43:44 · 188 阅读 · 0 评论 -
[读书笔记]深度探索C++模型_第七章_站在对象模型的尖端
template、exception handling(EH)、runtime type identification(RTTI)template的声明。基本来说就是当你声明一个template class、template class member function等等时,会发生什么事情。如何“实例化”class object、inline nonmember 以及 member tem...原创 2018-06-27 16:47:35 · 284 阅读 · 0 评论 -
AVL树与红黑树的比较
红黑树比AVL树的效率如果插入一个node引起了树的不平衡,AVL和RB-Tree都是最多只需要2次旋转操作,即两者都是O(1);但是在删除node引起树的不平衡时,最坏情况下,AVL需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级O(logN),而RB-Tree最多只需3次旋转,只需要O(1)的复杂度。作者:Acjx 链接:https://www.zh...转载 2018-07-03 10:29:02 · 1887 阅读 · 0 评论 -
C++11的智能指针(常见面试问题)
Q:讲讲智能指针吧。 A:三种智能指针,shared_ptr,unique_ptr,weak_ptr。Q:shared_ptr的原理 A:shared_ptr维护了一个指向control block的指针对象,来记录引用个数。Q:weak_ptr的原理 A:weak_ptr用于避免shared_ptr相互指向产生的环形结构,造成的内存泄漏。weak_ptr count是弱引用个数;弱...转载 2018-08-16 23:17:42 · 10249 阅读 · 0 评论 -
C++11线程中的几种锁
线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能与性能成反比。不过我们一般不使用递归锁(C++标准库提供了std::recursive_mutex),所以这里就不推荐了。互斥锁(Mutex)互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线程和一个任务队列。任何是一个线...原创 2018-08-21 16:51:13 · 63697 阅读 · 7 评论 -
multimap的实际用途
multimap的实际用途由map引出的问题最近在看《C++并发编程实战》提到,实现一个细粒度的MAP数据结构,里面只能使用哈希表。然后table里面的pair()中key和value是一一对应的所以,就可以在后台内存建立一张由用户ID(key)组成的用户状态多线程并发表。然后我就想到了,那么multimap的实际作用是什么呢?然后就卡住了,经过上网查阅,我得到了以下的例子: 比如在电话...原创 2018-05-23 21:49:44 · 11228 阅读 · 0 评论 -
[读书笔记]浅析《Effective C++》中的设计模式和安全性
前言“学习程序语言根本大法是一回事;学习如何以某种语言设计并高效程序则是另一回事。”这段话来自《Effective C++》的导读中。告诉了我们学会使用语言和灵活高效使用它们是同样的重要。 上一周拜读了这一本经典的名作,发现这本书中对C++编程中的一些设计模式和安全性(主要是针对C++中的OOP)里有许多非常有意思的探讨,我在这里记录一下方便以后查阅。设计模式条款4:确定对象被...原创 2018-05-02 21:48:16 · 307 阅读 · 1 评论 -
[C++ Primer CH04]第4章 表达式(笔记)
小结:C++语言提供了一套丰富的运算符,并定义了这些运算符作用于内置类型的运算对象时所执行的操作。此外,C++语言还支持运算符重载的机制,允许我们自己定义运算符作用于类类型时的含义。第14章将介绍如何定义作用于用户类型的运算符。对于含有超过一个运算符的表达式,要想理解其含义关键要理解优先级、结合律和求值顺序。每个运算符都有其对应的优先级和结合律,优先级规定了复合表达式中运算符组合的方式,结原创 2017-06-29 17:27:28 · 349 阅读 · 0 评论 -
[C++ Primer CH01]第1章 开始
本章介绍C++的大部分基础内容,类型、变量、表达式、语句及函数。笔记:在大多数系统中,main的返回值被用来只是状态。返回值0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型。在不同的操作和编译器系统中,运行C++编译器的命令也各不相同。最常用的编译器是GNU编译器和微软Visual Studio编译器。默认情况下,运行GNU编译器的命令是g++。注释界定符原创 2017-06-20 19:35:53 · 366 阅读 · 0 评论 -
[C++ Primer CH05] 第5章语句(笔记)
小结:C++语言提供了有限的语句类型,它们中的大多数会影响程序的控制流程:● while、for和do while语句,执行迭代操作。● if和switch语句,提供条件分支结构。● continue语句,终止循环的当前一次迭代。● break语句,退出循环或者switch语句。● goto语句,将控制权转移到一条带标签的语句。● try和catch原创 2017-07-03 10:38:09 · 419 阅读 · 0 评论 -
[C++ Primer CH02]第2章 变量和基本类型(笔记)
小结:类型是C++编程的基础。类型规定了其对象的存储要求和所能执行的操作。C++语言提供了一套基础内置类型,如int和char等,这些类型与实现它们的机器硬件密切相关。类型分为非常量和常量,一个常量对象必须初始化,而且一旦初始化其值就不能再改变。此外,还可以定义复合类型,如指针和引用等。复合类型的定义以其他类型为基础。C++语言语序用户以类的形式自定义类型。C++库通过类提供了一套高级抽象类型,如输入输出和string等。原创 2017-06-23 09:20:32 · 393 阅读 · 0 评论 -
[C++ Primer CH07] 第7章 类(笔记)
小结:类是C++语言中最基本的特征。类允许我们为自己的应用定义新类型,从而使得程序更加简洁且易于修改。类有两项基本能力:一是数据抽象,即定义数据成员和函数成员的能力;而是封装,即保护类的成员不被随意访问的能力。通过将类的实现细节设为private,我们就能完成类的封装。类可以将其他类或者函数设为友元,这样它们就能访问类的非公有成员了。类可以定义一种特殊的成员函数:构造函数,其作用是控制原创 2017-07-13 10:22:28 · 349 阅读 · 0 评论 -
[C++ Primer CH03]第3章 字符串、向量和数组(笔记)
小结:string和vector是两种最重要的标准库类型。string对象是一个可变长的字符序列,vector对象是一组同类型对象的容器。迭代器允许对容器中的对象进行间接访问,对于string对象和vector对象来说,可以通过迭代器访问元素或者在元素间移动。数组和指向数组元素的指针在一个较低的层次上实现了与标准库类型string和vector类似的功能。一般来说,应该优先选用标准库提原创 2017-06-28 10:20:03 · 322 阅读 · 0 评论 -
[C++ Primer CH06] 第6章 函数(笔记)
小结:函数是命名了的计算单元,它对程序(哪怕是不大的程序)的结构化至关重要。每个函数都包含返回类型、名字、(可能为空的)形参列表以及函数体。函数体是一个块,当函数被调用的时候执行该块的内容。此时,传递给函数的实参类型必须与对应的形参类型相容。在C++语言中,函数可以被重载:同一个名字可以用于定义多个函数,只要这些函数的形参数量或形参类型不同就行。根据调用时所使用的实参,编译器可以自动的选定原创 2017-07-07 23:18:14 · 507 阅读 · 0 评论 -
如何定义一个只能在堆上(栈上)生成对象的类?
链接:https://www.nowcoder.com/questionTerminal/0a584aa13f804f3ea72b442a065a7618来源:牛客网在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动转载 2018-01-27 14:33:11 · 221 阅读 · 0 评论 -
[C++ Primer Plus学习笔记Ⅰ]C++中的异常类
C++异常的主要目的是为设计容错程序提供语言级支持,即异常使得在程序设计中包含错误处理功能更容易,以免事后采取一些严格的错误处理方式。1.stdexcept异常类这些类的构造函数接受一个string对象作为参数,该参数提供了方法what()返回的字符串(1)logic_error异常类系列logic_error描述了典型的逻辑错误。作为以下4种派生类的基类*domain_error:函数在参数不在...转载 2017-06-06 15:51:14 · 415 阅读 · 0 评论 -
[C++ Primer Plus学习笔记Ⅱ]const的用法归纳与整理
const的用法可以用两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用该指针修改所指向的值,第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。注意:如果数据类型本身不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。禁止将常量数组的地址赋给非常量指针将意味...转载 2017-06-06 15:58:44 · 570 阅读 · 0 评论 -
[C++ Primer Plus学习笔记Ⅲ]Game Engine中关于编译、链接的基本单元的笔记
源文件:常见的C++源文件扩展名为.c、.cc、.cxx和.cpp,这些文件包含程序的大量源代码。翻译单元:技术上,源文件称为翻译单元。头文件: 特殊的源文件,通常用于在多个翻译单元之间分享信息,例如类型声明及函数原型。 C++预处理器(preprocessor)预先把每个#include语句替换为相对应的头文件内容,然后再把翻译单元送交给编译器。对象文件:编译翻译单元后,输出的机器码会储存在对象...转载 2017-06-07 20:27:42 · 335 阅读 · 0 评论 -
C++,取得[a,b]的随机整数,使用(rand()%(b-a+1)+a);
#include <stdlib.h> #include <time.h> int getRand(int begin,int end){ srand((unsigned)time(NULL)); return rand()%(end - begin + 1) + begin;}原创 2018-09-13 11:21:42 · 2904 阅读 · 0 评论