
C++ STL
文章平均质量分 50
Ferlan
天下大事,必作于细!
展开
-
C++多态 及底层如何实现
c++多态一,多态1.虚函数2.虚函数的重写3.多态的简单举例4.构成多态的充分条件5.探索多态的底层---虚表5.1什么是虚表5.2虚表6.关于多态里面一些需要注意的地方7.协变8.纯虚函数和抽象类一,多态多态是c++面向对象三大特性之一,关于什么是多态,我们需要先来了解一下虚函数和重写。1.虚函数在类的成员函数前面加上virtual关键字,就构成了虚函数。2.虚函数的重写当在子类定...原创 2018-10-06 16:19:08 · 3231 阅读 · 4 评论 -
制作一个微型shell
1 /* 模拟shell写一个咱们自己的微型myshell 2 * 功能:myshell> ls 3 * 能够执行各种命令 4 * 5 */ 6 #include <stdio.h> 7 #include <unistd.h> 8原创 2018-09-20 09:48:39 · 611 阅读 · 0 评论 -
c++动态内存管理
new / delete / new[ ] / delete[ ]与C语言不通,C++更多使用new和delete进行内存管理int *p=new int;//开辟1个整型大小的空间,并由p指向它。int *p1=new int(3);//开辟1个整型大小的空间并初始化为3,由p1指向它。int *p2=new int[2];//开辟2个整型大小的空间,并由p2指向它。dele...原创 2018-06-15 16:02:50 · 244 阅读 · 0 评论 -
排序思想,代码实现和优缺点比较
void insert_sort(int *a, int size){ //插入排序: //每一步将一个待排序的元素,插入到前面已经有序的一组元素中, //直到元素排完为止。 assert(a); assert(size>0); for (int i = 1;i < size;i++) {原创 2018-06-14 23:59:53 · 633 阅读 · 0 评论 -
面向对象 和类
面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程。面向对象有三大特征:封装性、继承性、多态性,其中封装性指的是隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安...原创 2018-06-14 23:55:15 · 209 阅读 · 0 评论 -
C++简介,命名空间,函数重载,缺省参数
C++C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。 [1] C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。...原创 2018-06-14 23:40:31 · 309 阅读 · 0 评论 -
C++ 类和对象——6中默认的成员函数
c++的类中有6种默认的成员函数: 在介绍这些成员函数之前,先要了解2个概念:函数重载 在同一个作用域内,1组函数函数名相同,而参数个数或数目不同,返回值可同可不同,这就是函数的重载,简单理解就是同名函数有不同的功能。缺省函数 顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。 缺省参数使用主要规则:调用时你只能...原创 2018-06-14 23:01:07 · 290 阅读 · 0 评论 -
C++中指针 & 引用 & const
引用定义:引用可以理解成给变量多起了一个别名。格式:类型 & 引用变量名=原变量名 比如int a=10;int &b=a;b=20;定义变量a的值为10,又定义一个变量b作为a的别名,这是a和b表示同一块儿空间的值,改变b的值为20,a的值也改变。引用的特点 (1)一个变量可以有多个别名 (2)引用必须要初始化 (3)引用只能在初始化的时候...原创 2018-06-03 23:17:39 · 242 阅读 · 0 评论 -
STL源码剖析---关联式容器map详解
STL源码剖析---关联式容器map什么是mapmap中存储的键值对map的迭代器map的常用操作总结什么是mapmap是STL中关联式容器的一种,所谓关联式容器,元素是按关键字来保存和访问的,而序列式容器中的元素则是按它们在容器中的位置来顺序保存和访问的。本片博客的主角map中,存储的不是一般的数据,而是一个个的键值对,我们称之为pair,pair键值对由两部分组成:键值key和实值v...原创 2019-01-16 10:08:02 · 704 阅读 · 0 评论 -
关联式容器set详解
STL源码剖析---关联式容器set详解什么是setset的迭代器set的常用操作代码测试什么是set上篇博客详细介绍了关联式容器map ,今天我们来了解一下它的姊妹篇–set.set也属于关联式容器.他们俩底层都由红黑树实现,所以set的查询,插入,删除效率都很高,且set内的数据也是有序的(默认升序)。但map的缺点set也有,不能够存储不能比较的数据,且数据不重复。set存储的数据...原创 2019-01-16 15:09:47 · 724 阅读 · 0 评论 -
单例模式
什么是单例模式单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。单例模式的实现实现单例模式一般有两种方式:饿汉模式和懒汉模式。饿汉模式我们用一个洗碗的例子来解释饿汉模式和懒汉模式。现在有饿汉和一个脏了的碗,饿汉希望下次想吃饭的时候能直接盛饭吃,所以他就先把碗先洗好,这样随...原创 2019-01-28 17:37:37 · 249 阅读 · 0 评论 -
vector迭代器失效的问题
当你使用vector容器时,如果你进行下面2种中的任意一种操作:vector已满再进行插入操作使用erase()删除数据.就会导致迭代器失效.为什么呢?我们举个列子#include<iostream>#include<vector>#include<list>#include&a原创 2019-01-13 16:27:49 · 975 阅读 · 1 评论 -
C++模板为什么不支持分离编译?
模板为什么不支持分离编译?首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Exec...转载 2019-01-13 09:24:34 · 300 阅读 · 0 评论 -
C++智能指针
智能指针什么是智能指针?为什么要有智能指针?auto_ptrunique_ptrshared_ptrshared_ptr引发的线程安全问题:什么是智能指针?为什么要有智能指针?在C++程序里,使用new关键字开辟的内存必须被手动delete掉,不然就会导致内存的泄漏,但是,当程序非常冗长,你能保证自己每一个手动开辟的内存块都释放了吗?在delete之前,倘若程序因为异常跳转后,你还能保证内...原创 2019-01-17 09:59:53 · 8123 阅读 · 0 评论 -
c++ String类及深浅拷贝(传统写法与现代写法)code
主要内容:模拟实现String类的默认成员函数,增删查改,及各类运算符重载等。#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<string.h>#include<stdlib.h>#include<asse原创 2018-09-09 15:32:41 · 383 阅读 · 0 评论 -
c++ 继承 及 派生类的默认成员函数解析
继承,就像字面的意思,是从别的地方获得一些本来不属于自己的东西。在c++中,继承是非常重要的对象复用手段。在编写大型程序时,往往有很多的类,每个类都有自己的成员变量和成员函数,但有些类之间的数据成员和函数却相同,为了节省代码量和工作时间,只需继承父类中的数据成员和函数即可。有了继承,继承对象可以使用被继承对象的成员变量和成员函数,这样大大提高了代码的复用性。继承的简单实例:cl...原创 2018-09-07 21:06:07 · 1474 阅读 · 0 评论 -
C++ List
#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct Listnode{ DataType _data; Listnode* _next; Listnode* _prev; Listnode()原创 2018-08-07 09:23:33 · 604 阅读 · 0 评论 -
C++ Vector 顺序表
Vector.h#include<iostream>#include<assert.h>using namespace std;typedef int DataType;class Vector{public: Vector()//构造函数 : first(NULL) , finish(NULL)原创 2018-08-03 11:26:15 · 793 阅读 · 0 评论 -
写时拷贝 code
写时拷贝解决2个问题: 1.析构多次 2.修改一个对象会影响其他变量设置引用计数后,当一个对象析构,引用计数-1,没有减到0就不释放空间,能够解决问题1. 当对字符串进行修改时,判断其引用计数是否大于1(大于1说明至少2个对象指向该串,贸然修改就会出现问题2),此时使用剥削手法,为要修改的对象分配同样的空间,另外操作,即可解决问题2.class String{public:...原创 2018-08-02 09:36:24 · 285 阅读 · 0 评论 -
写时拷贝
写时拷贝(Copy On Write)方案详解 本文旨在通过对 写时拷贝 的四个方案(Copy On Write)分析,让大家明白写时拷贝的实现及原理。关于浅拷贝与深拷贝,我在之前的博客中已经阐述过了 浅拷贝容易出现指针悬挂的问题,深拷...转载 2018-07-31 09:32:39 · 364 阅读 · 0 评论 -
C++日期类练习
#include<iostream>#include<windows.h>using namespace std;class Date{public: Date(int year = 1900, int month = 1, int day = 1)//构造函数 :_year(y原创 2018-06-19 00:12:17 · 370 阅读 · 0 评论 -
const成员函数 , 内联函数 , 友元 , static成员 , N种-构造拷贝构造的优化
const修饰成员函数在成员函数后面加const,意味着this指针指向的对象只读。 const修饰了this指针所指向的对象还有一个好处,那就是const形参可以接受const或非const的实参,而非const的形参只能接受非const的实参。inline(内联)用inline修饰的成员函数是内联函数,当调用内联函数时,C++编译器会在调用出将内联函数展开,而不会重新开辟...原创 2018-06-16 13:25:44 · 294 阅读 · 0 评论 -
浅析AVL树
什么是AVL树今天我们来讲一讲AVL树,AVL树是二叉搜索树的优化版,又称平衡二叉搜索树,高度平衡树。我们都知道,当一棵二叉搜索树的节点一直单边插入时,这时候它的查找效率趋近于O(n),非常慢。而AVL树的特点是:“AVL树中任何节点的两个子树的高度最大差别为1” ,这样就克服了节点单边存储而导致查找效率低下的问题。如上图,左边是AVL树,右侧为非AVL树,右子树高度减去左子树的高度(...原创 2019-01-10 16:07:18 · 1284 阅读 · 0 评论