C++
文章平均质量分 78
Amberda
(ˉ▽ ̄~)
展开
-
模拟实现容器vector(含迭代器、类型萃取)
STL库以高效闻名,它的六大组件(容器,迭代器,仿函数,算法,适配器,空间配置器)都非常重要,今天来模拟实现一下容器中的vector。 vector,你可以将它理解成一个顺序表,也就是数组。只是STL里的vector是由三个迭代器来维护的:_start(数据存放开始的位置),_finish(数据存放结束位置的下一个),_endofstorage(容量的最后一个位置)。vector里的迭代器其实就是原创 2017-11-04 17:00:28 · 235 阅读 · 0 评论 -
Effective C++读书笔记三(资源管理)
所谓资源就是,一旦你用了它将来必须还给系统。 C++程序中最常使用的资源就是动态分配内存,但内存只是你必须管理的众多资源之一。例如:文件描述符、互斥锁、图形界面中的字型和笔刷、数据库连接及网络socket。不论是哪一种资源,当你不再使用它的时候,必须将它还给系统。条款13:以对象管理资源先来看个例子:class Investment {...}; //继承体系中的root...原创 2018-08-11 09:58:46 · 214 阅读 · 0 评论 -
Effective C++读书笔记四(设计与声明)
条款18:让接口容易被正确使用,不易被误用如果客户企图使用某个接口而却没有获得他所预期的行为,那么这个代码就不该通过编译;如果代码通过了编译,它的所作所为就应该是客户想要的。 要是想开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户有可能做出什么样的错误。来看个例子:class Date{public: Date(int month, int day, in...原创 2018-08-14 15:32:04 · 185 阅读 · 0 评论 -
C++11中值得关注的几大变化(详解)
源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变化“追问为什么要引入这...转载 2018-08-06 10:01:38 · 473 阅读 · 0 评论 -
Effective C++读书笔记二(构造 / 析构 / 赋值运算)
条款05:了解C++默默编写并调用了哪些函数class Empty{};上面这个类是一个 空类,但是经过C++处理之后,它就不再是一个空类了。如果你自己没有生命,编译器就会为它声明一个构造函数、拷贝构造函数、赋值运算符重载和析构函数,所有这些函数都是public而且inline的。其实上面的类就会变成下面这个样子class Empty{public: Empty(){...原创 2018-08-09 23:07:55 · 217 阅读 · 0 评论 -
C/C++动态内存管理
在C语言中,如果我=我们需要动态开辟一块空间,会用到下面这几个函数:malloc:void* malloc(size_t size); malloc函数是在内存中开辟一段连续的空间,开辟的大小为size个字节。开辟成功之后会返回这块空间的首地址calloc:void* calloc(size_t num, size_t size);calloc和malloc...原创 2018-08-05 13:39:51 · 197 阅读 · 0 评论 -
C++----浅析智能指针
背景到目前为止,我们编写的程序中所使用的对象都有着严格定义的生命周期。全局对象在程序启动时分配,在程序结束时销毁。对于局部自动变量,当我们进入其定义所在的程序块时被创建,在离开块的时候销毁。局部static对象在第一次使用前分配,在程序结束时销毁。 除了自动和static对象外,C++还支持动态内存分配。动态分配的对象的生命周期与它们在何处创建是无关的,只有它们被显示释放时,这些对象才会销毁...原创 2018-08-05 12:22:42 · 228 阅读 · 0 评论 -
C++-----不能声明为虚函数的函数和建议声明为虚函数的函数
不能声明为虚函数的函数1. 普通函数普通函数不是类的成员函数,所以只能被重载而不能被重写,声明为虚函数也没有任何的意义。而且编译器会在编译时绑定函数,但动态多态体现在运行时绑定。2. 静态成员函数首先静态成员函数不属于任何类对象或类实例,它是所以类对象共享的,所以静态函数变为虚函数没有意义。 其次静态函数中没有this指针,而虚函数依靠虚表指针和虚表来调用,虚表指针在类的构造函数...原创 2018-08-03 17:46:47 · 314 阅读 · 0 评论 -
面试题-----大数相乘问题
在计算机中存储数据的大小是有限的,当我们需要表示一个很大的数的时候应该很自然就能想到用字符串。字符串相乘问题在笔试面试中也比较常见,直接上思想:我们可以借助于可动态调整大小的数据结构(vector,string,deque)模拟实现数字的乘法操作。对于普通的乘法,我们知道m位数和n位数相乘,最后的结果位数在区间[m+n-1,m+n]内。 举个例子:25*23 就是标准的手动乘法运算,只...原创 2018-07-16 21:29:26 · 621 阅读 · 0 评论 -
C++------浅拷贝、深拷贝和写时拷贝
浅拷贝先来看一个例子:class String {public: String(const char * pData = "") :_pData(new char[strlen(pData) + 1]) { strcpy(_pData, pData); } ~String() ...原创 2018-04-28 22:23:21 · 629 阅读 · 0 评论 -
STL-----模拟实现一级空间配置器
众所周知,STL中有六大组件:容器容器适配器仿函数迭代器算法空间配置器在之前的学习中前面五种我们都已经接触过了,但是在学习其他组件的过程中,我们会发现一个东西隐藏在了一切组件的背后,它就是空间配置器以STL的实现角度而言,空间配置器是第一个就需要介绍的组件。因为整个STL的操作对象都存放在容器之内,而容器一定需要配置空间来存放数据的。在我们平时写程序时,需要开辟空间可...原创 2018-05-11 22:30:25 · 349 阅读 · 0 评论 -
数据结构------并查集
先来看一道题: 假设一组有n个人和m对好友关系(存于数组r)。如果两个人是直接或者间接好友(好友的好友就是间接好友),则认为他们属于同一个朋友圈,请写出程序求出这个n个人里面一共有多少个朋友圈。 例如:n = 5,m = 3,r = {{1,2},{2,3},{4,5}} 表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于一个朋友圈.。则一共拥有...原创 2018-04-25 20:27:06 · 409 阅读 · 0 评论 -
C++-----重载、重写与隐藏
之前在学习C++继承和多态的时候对于三个概念理解的不是很透彻,现在对这三个的概念来总结一下重载 overload重载:简单说就是函数名称相同,但是参数列表不相同的情形,这样的同名不同参数的函数互相称之为重载函数。 重载实际上属于多态的一种,是编译时多态即静态多态 来看看重载的条件相同的范围(成员函数重载)函数名相同参数列表不同在这里解释一下参数列表不同可以是以下几种...原创 2018-05-03 18:11:08 · 210 阅读 · 0 评论 -
C++多态浅析
多态,字面意思就是多种形态,最初来源于希腊语,在C++中有着更加广泛的含义,是面向对象编程领域的核心概念。 多态性可以简单地概括为“一个接口,多种方法。先来看看多态的分类: 来看个静态多态的例子:int Add(int left, int right){ return left + right;}char Add(char left, char right){原创 2017-11-04 16:47:50 · 372 阅读 · 0 评论 -
C++模拟实现容器list(含迭代器)
list同之前实现过的容器vector类似,都是STL众多容器中的一个。STL中实现的链表是带头结点的双向循环链表,这种链表相比于之前我们在C语言和C++初级阶段模板实现的链表或者双向链表更加的方便,更加方便的遍历,方便查找,方便各种操作。 在vector中,我们是用一个原生态的指针来当做迭代器,但是在list中我们只能对指针进行封装来实现迭代器。 list的基本结构就如上图所示,接下来看看原创 2017-11-12 23:45:39 · 1604 阅读 · 0 评论 -
C++继承浅析
面向对象程序设计中最重要的一个概念就是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。 当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,又称为父类,新建的类称为派生类,又称为子类。 一、派生类的定义格式和声明:class Base{p原创 2017-10-05 22:07:41 · 248 阅读 · 0 评论 -
C++实现日期类
今天的小程序是用C++编写一个简单的日历(比较菜,所以没有实现界面)。比较麻烦的就是平年和闰年对二月天数的变化了,主要实现功能就是两个日期比较(大于、小于、等于、不等于),和两个日期之间相隔的天数,还有一盒日期加上几天或减上几天到了哪一个日期。话不多说,直接上代码!(每个函数都有注释哦!) #include #include using namespace std;class D原创 2017-09-25 23:51:24 · 3218 阅读 · 0 评论 -
Effective C++读书笔记一(让自己习惯C++)
条款01:视C++为一个语言联邦最初的C++只是C加上一些面型对象特性,就像C++最初的名字“C with Classes”。但是现在C++已经是一个多重泛型编程语言。为了理解C++我们必须认识其主要的次语言1、CC++仍然是以C为基础,区块、语句、预处理器、内置数据类型、数组、指针等通通来自于C2、Object-Oriented C++这部分也就是C with Cla...原创 2018-08-08 23:22:57 · 166 阅读 · 0 评论