c++
文章平均质量分 89
TLpigff
这个作者很懒,什么都没留下…
展开
-
实现日期类
include using namespace std;class Date { friend ostream& operator<<(ostream& _cout, const Date& d); public: Date(int year = 1900, int month = 1, int day = 1) : _year(year)原创 2017-03-23 11:11:54 · 242 阅读 · 0 评论 -
多态与多态对象模型
多态即多种形态。多态分两种 编译时多态:在编译期间编译器根据函数实参的类型确定要调哪个函数(这个我们之前已经接触过了,和函数重载差不多,是同名函数,但是参数不同) 运行时多态:在程序运行期间才会去判断到底会调用哪个函数。这里我们主要讲的就是动态多态。 C++怎么实现多态?(动态多态,静态多态,函数多态,宏多态)动态多态通过虚函数和继承实现 静态多态通过泛型来实现 函数多...原创 2018-04-12 15:02:46 · 728 阅读 · 1 评论 -
C/C++动态内存管理
先来看下C语言中内存分配的方式(有三种) 在静态存储区分配内存:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。 全局的未初始化的变量分配在BSS段,全局的已初始化的变量分布在data段即已初始化数据段。这两者都属于从静态存储区分配。 BBS段是不占用可执行文件空间的,它只记...原创 2018-04-06 11:23:50 · 553 阅读 · 0 评论 -
Ubuntu16.04安装boost库
到boost官网安装一个boost库的压缩包,我下的是1.67.0版本执行下面的命令解压tar -xzvf boost_1_67_0.tar.gz 解压出来以后,进入解压出来的文件夹,执行下面的命令sudo ./bootstrap.sh在执行下面的命令,这样头文件就被默认安装在/usr/local/include头文件下,库文件就被默认安装在/usr/local/lib下sudo ./b2 ins...原创 2018-07-02 19:24:03 · 36105 阅读 · 8 评论 -
C++的html模板库——google-ctemplete
C++也能用来写网页,Google的大佬们开发的google-ctemplete,就是一个很好的用于写网页的库。一.下载安装包下载地址:点击打开链接点开之后直接点击download下载就完事了二.安装首先解压安装包,完了以后./configuremakesudo make install这时因为我们在./configure时没有加上选项给上安装的路径,就自动安装到/usr/local/lib库中了...原创 2018-06-27 17:06:53 · 3528 阅读 · 1 评论 -
正则表达式
正则表达式目的(最初是由Linux的sed和grep发展而来) 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”) 可以通过正则表达式,从字符串中获取我们想要的特定部分。 目的 验证: 表单提交时,进行用户名密码验证。 查找: 从大量信息中快速提取指定内容。在一批url中,查找指定url 替换: 将指定格式的文本,进行正则匹配查找,找到之...原创 2018-07-16 17:56:29 · 259 阅读 · 0 评论 -
libcurl开源库实现C++爬虫
libcurl是一个免费且易于使用的客户端URL传输库,是一个轻量级的HTTP编程库,很好使用,curl也是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。当然我们可以用它来实现一个简易的C++爬虫(不是Python才能爬虫的哦=_=)一.安装libcurl库sudo wget http://curl.haxx.se/download/curl-7.35.0.tar...原创 2018-07-14 11:18:30 · 5112 阅读 · 2 评论 -
基于百度brpc框架的简易站内搜索引擎
因为之前坐了一个网站,完成了简单的站内搜索的功能,但是效率太低,每次都要从数据库中提取数据出来。于是花了一点时间改善了这个站内搜索的功能,通过倒排索引和正排索引来实现搜索功能。注意:本项目用到的库都需要自行安装(cppjieba,jsoncpp,brpc,gflags,protobuf,leveldb),后三个是brpc要求安装的思路:一.首先实现一个制作索引的线下程序从数据库中先...原创 2018-07-28 12:26:34 · 2450 阅读 · 0 评论 -
单例模式——饿汉模式
所谓的单例模式,就是设计一个类,它在整个程序中只能有一个该类的实例存在,这就是单例模式。C++实现单例模式的一般方法是将构造函数,拷贝构造函数以及赋值运算符函数声明成private,从而禁止他人创建实例。否则如果上面三者不为私有,那么他人就可以调用上面的三个函数来创建实例,就没法实现单例模式。但是我们总归是要创建一个类的,我们可以提供一个public的静态方法来帮助我们获得这个类唯一的一个实例...原创 2018-08-22 16:39:02 · 21574 阅读 · 4 评论 -
C++中的继承以及菱形继承
继承:面向对象程序设计使代码可以复用的最重要手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能。 继承格式:class 派生类:(public,protected,private)基类 继承方式 基类的public成员 基类的protected成员 基类的private成员 ...原创 2018-04-12 14:58:54 · 1672 阅读 · 0 评论 -
C++中this指针
初学C++,刚接触的一个很重要的东西就是this指针。 this指针,是类的成员函数所独特具有的一类指针。它自动生成在函数的第一个参数,且自动隐蔽。this指针的作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。 下面简单介绍一下this指针是如何使用的includeusing namespace std;class St原创 2017-03-13 11:23:25 · 609 阅读 · 0 评论 -
浅拷贝,深拷贝和写时拷贝(string类)
浅拷贝浅拷贝:编译器只是直接将指针的值拷贝过来,结果多个对象共用了一块内存,当一个对象调用了析构函数将这块内存释放掉之后,另一些对象不知道这块空间已经还给了系统,再次调用析构函数进行释放时发现已经释放了,就会造成程序崩溃。所以,在类的成员中有指针类型的成员变量的时候,必须对其写出显式的拷贝构造函数和赋值运算符重载函数,否则,默认的拷贝构造函数和赋值运算符重载函数只会对该指针进行浅拷贝(即直接将指针...原创 2018-04-07 16:28:58 · 421 阅读 · 2 评论 -
C++中的智能指针
以下四个智能指针都是boost库中的1.auto_ptr 管理权转移,带有缺陷的设计。尽量不要使用它2.scoped_ptr 防拷贝,高效简洁。不需要拷贝/赋值,尽量使用它3.shared_ptr 共享(引用计数)管理、支持赋值/拷贝。缺陷:循环使用(针对循环使用有weak_ptr).4.weak_ptr辅助shared_ptr解决循环引用,不增加引用计数。下面是关于auto_ptr的模原创 2017-06-14 20:55:30 · 842 阅读 · 0 评论 -
C++模板类实现顺序表
#pragma once#include<stdio.h>#include <iostream>#include<string>#include<assert.h>using namespace std;template <class T>class Vector{public: Vector() : _a(NULL) , _size(0)原创 2017-06-14 21:03:49 · 337 阅读 · 0 评论 -
C++模板类实现链表
#pragma once#include <assert.h>template<class T>struct ListNode{ T _data; ListNode<T>* _next; ListNode<T>* _prev; ListNode(const T& x) :_data(x) ,_next(NULL) ,_原创 2017-06-14 21:01:48 · 469 阅读 · 0 评论 -
C++中const,static,inline的用途
1、const的用途 const修饰变量、参数、返回值: 在C++中const修饰变量,变量会变成常量,所以声明的同时必须初始化。C++会对常量优化,将其放到寄存器中,如果想去内存中取值的话,使用volatile关键字修饰,保证内存可见性。而在C中const会将变量修饰为常变量,存储在静态文本段, 只有读权限,不能被修改。 const修饰指针: 常量指针:原创 2017-09-18 11:06:23 · 1342 阅读 · 0 评论 -
STL库中的list的使用和模拟实现
简单介绍list上文我们讲到了STL库中的vector的使用和模拟实现,其实list和vector在很多地方都有相似之处。STL库中的list是一个双向循环链表。它的简单的结构如图 我们还是先来看看它里面有什么。list的内容与使用一. 首先还是雷打不动的三个成员函数,构造函数,析构函数和赋值运算符重载。二. 其次是迭代器。这里需要注意一下的是,begin()返回的是第一个元素的位置,原创 2017-09-24 11:25:34 · 673 阅读 · 0 评论 -
指针与引用的区别
相同点: 指针与引用都是地址的概念,指针指向的是一块内存,它的内容是这块内存的地址;引用是某块内存的别名。区别: 1.指针是一个实体,而引用仅仅只是一个别名。 2.引用使用时不需要解引用‘*’,指针使用时需要解引用。 3.引用只能在定义的时候被初始化一次,之后不能再改变作为别的变量的别名,而指针可以在任意时候改变它的指向(const指针除外)。 4.引用的对象必须是有效的一个变量,原创 2017-09-20 14:56:13 · 474 阅读 · 0 评论 -
malloc/free和new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。(本质区别)**malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用malloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限原创 2017-06-14 21:14:18 · 249 阅读 · 0 评论 -
单链表的一些基本操作
顺序表与链表各自的优缺点: 1. 顺序表支持随机访问,单链表不支持随机访问。 2. 顺序表插入 / 删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入 / 删除效率更高,时间复杂度为O(1)。 3. 顺序表的CPU高速缓存效率更高,单链表CPU高速缓存效率低1.倒着打印单链表void PrintTailToHead(ListNode* pList)//倒着打印单原创 2017-06-19 10:33:38 · 393 阅读 · 0 评论 -
单例模式——懒汉模式
上一篇文章讲到了单例模式的饿汉模式,这一篇来讨论一下单例模式的懒汉模式。所谓懒汉模式,就是像一个懒汉一样,需要用到创建实例了程序再去创建实例,不需要创建实例程序就“懒得”去创建实例,这是一种时间换空间的做法,这体现了“懒汉的本性”。如果有多个线程,同时调用了获取实例,那么可能就会产生多个实例,那么这就不是我们的单例模式了。所以我们需要做一些事情才能保证我们是一个单例类。额当然,我们先来...原创 2018-08-22 18:03:47 · 10605 阅读 · 5 评论