C++
小麦大大
写写代码纪录生活
展开
-
STL算法库(2)
C++原创 2022-08-05 15:32:03 · 235 阅读 · 0 评论 -
STL算法库(1)
C++原创 2022-08-05 15:15:17 · 178 阅读 · 0 评论 -
C++模板简单使用案例
C++原创 2022-08-05 13:57:03 · 137 阅读 · 0 评论 -
protocol buffer
安装和第一个案例:https://www.cnblogs.com/WindSun/p/12543066.html转载 2022-05-05 14:40:03 · 106 阅读 · 0 评论 -
内存泄漏定位方法与位置
#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>#ifdef _DEBUG#define new DEBUG_CLIENTBLOCK#endif#include原创 2021-03-29 10:08:47 · 278 阅读 · 0 评论 -
C++11 tuple元组
C++11 tuple 元组tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值;tuple容器, 可以使用直接初始化, 和"make_tuple()"初始化, 访问元素使用**"get<>()**"方法, 注意get里面的位置信息, 必须是常量表达式(const expressi...翻译 2020-04-11 14:22:04 · 333 阅读 · 0 评论 -
C++ lower_bound 和upper_bound、binary_search(二分)用法
用法:函数头文件: #include 使用前提:该数组有序。(根据二分查找的规则,数组必须有序)二分查找的函数有 3 个:lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个等于某元素 的位置。upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个大于某个元素 的位置。binary_search(起始地址,结束地址,要查找的数值...原创 2020-03-26 20:28:01 · 635 阅读 · 0 评论 -
C++实现二叉树
1、binarySearchTree源码解释与测试调试环境采用的是VS2015,大家可以选择自己合适的编译环境去调试。binarySearchTree.h#ifndef BINARY_SEARCH_TREE#define BINARY_SEARCH_TREE#include<iostream>#include<stack>#include<deque&g...翻译 2020-03-03 14:25:37 · 193 阅读 · 0 评论 -
stack源码解析
1、stack源码解释与测试调试环境采用的是VS2015,大家可以选择自己合适的编译环境去调试。stack.h#ifndef MY_LINKLIST_H#define MY_LINKLIST_H#include<vector>#include<iostream>using namespace std;template <typename T> c...翻译 2020-03-02 12:31:38 · 259 阅读 · 0 评论 -
LinkList单链表
1、LinkList源码解释与测试调试环境采用的是VS2015,大家可以选择自己合适的编译环境去调试。(先了解一些单链表,后面在写一篇STL,双向链表的源码)LinkList.h#ifndef MY_LINKLIST_H#define MY_LINKLIST_H#include<vector>#include<iostream>using namespace ...翻译 2020-03-02 10:35:39 · 613 阅读 · 0 评论 -
string源码解析
1、String源码解释与测试调试环境采用的是VS2015,大家可以选择自己合适的编译环境去调试。这边用了几个C语言的库函数是为了方便一点:例如strcpy,strcat等等String.h#ifndef STRING_H#define STRING_H#include<iostream>#include<iomanip>using namespace st...翻译 2020-03-01 17:02:19 · 193 阅读 · 0 评论 -
vector源码解析
1、vector源码解释与测试调试环境采用的是VS2015,大家可以选择自己合适的编译环境去调试。myVector.h#ifndef MY_VECTOR_H#define MY_VECTOR_H#define _SCL_SECURE_NO_WARNINGS #include <memory>#include <iostream>#include <a...翻译 2020-03-01 15:29:31 · 373 阅读 · 0 评论 -
C++11线程互斥量
为什么需要互斥量在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的。#include <iostream> // std::cout#include <thread> ...转载 2019-05-29 12:02:31 · 177 阅读 · 0 评论 -
C++11之线程学习
在C++11之前,C/C++一直是一种顺序的编程语言。顺序是指所有指令都是串行执行的,即在相同的时刻,有且仅有单个CPU的程序计数器执行代码的代码段,并运行代码段中的指令。而C/C++代码也总是对应地拥有一份操作系统赋予进程的包括堆、栈、可执行的(代码)及不可执行的(数据)在内的各种内存区域。而在C++11中,一个相当大的变化就是引入了多线程的支持。这使得C/C++语言在进行线程编程时,不比依赖...转载 2019-05-29 11:22:44 · 164 阅读 · 0 评论 -
String类的书写
//#include "pch.h"//VS2017需要加//#define _CRT_SECURE_NO_WARNINGS //strcpy不安全加这个宏解决警告#include<iostream>#include<iomanip>#include <string.h>using namespace std;class String { ...原创 2019-05-07 21:17:16 · 165 阅读 · 0 评论 -
lambda表达式用法与注意点
基本语法简单来说,Lambda函数也就是一个函数,它的语法定义如下:capture mutable ->return-type{statement}1.[capture]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数。捕捉列表能够捕捉上下文中的变量以供Lambda函数使用;2.(p...翻译 2019-04-25 17:13:36 · 1443 阅读 · 0 评论 -
左值引用、右值引用
左值引用、右值引用左值引用是对一个左值进行引用的类型,右值引用则是对一个右值进行引用的类型。左值引用和右值引用都是属于引用类型。无论是声明一个左值引用还是右值引用,都必须立即进行初始化。而其原因可以理解为是引用类型本身自己并不拥有所绑定对象的内存,只是该对象的一个别名。左值引用是具名变量值的别名,而右值引用则是不具名(匿名)变量的别名。左值引用: int &a = 2; ...翻译 2019-04-25 16:48:26 · 197 阅读 · 0 评论 -
DEBUG和RELEASE调试的区别
一、Debug和Release的区别Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得...转载 2019-05-05 17:29:54 · 1249 阅读 · 0 评论 -
c++ make_heap(), push_heap(),pop_heap()函数
1、头文件:algorithm对make_heap(), pop_heap(), push_heap()的用法做个总结:make_heap()生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器。第三个参数是可选的,可以用伪函数less()和greater()来生成大顶堆和小顶堆,其中type为元素类型。如果只传入前两个参数,默认是生成大顶...原创 2019-05-05 11:24:10 · 3923 阅读 · 0 评论 -
C++智能指针
智能指针的作用:智能指针托管对象,对象的释放就不用操心,让智能指针管理。智能指针要跟原对象一样,我们需要重载->和*号操作符。总结智能指针就是用栈对象编译器自动释放的原理:下面为智能指针的例子。#include <iostream>using namespace std;class Fun{public: int age; Fun(int age):a...原创 2019-01-08 19:51:14 · 130 阅读 · 1 评论 -
C++11常用特性(2)
智能指针内存管理在内存管理方面,C++11的std::auto_ptr基础上,移植了boost库中的智能指针的部分实现,如std::shared_ptr、std::weak_ptr等,当然,想boost::thread一样,C++11也修复了boost::make_shared中构造参数的限制问题。把智能指针添加为标准,个人觉得真的非常方便,毕竟在C++中,智能指针在编程设计中使用的还是非常广...原创 2018-08-18 16:16:31 · 155 阅读 · 0 评论 -
C++ - 对象模型之内存布局(一)
1、基本内存布局空类#include &lt;stdio.h&gt;class Child{};int main(){ Child child1; Child child2; printf("child1 : address(0x%p) size(%d)\n", &amp;child1,sizeof(child1)); printf(...原创 2018-08-17 00:30:05 · 184 阅读 · 0 评论 -
C++STL重点面试题目
1、vector的底层(存储)机制如何实现的?vector就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时,会自动申请另一片更大的空间(一般是增加当前容量的50%或100%),然后把原来的数据拷贝过去,接着释放原来的那片空间;当释放或者删除里面的数据时,其存储空间不释放,仅仅是清空了里面的数据。2、vector的自增长机制是如何?。当已经分配的空间不够装下数...原创 2018-08-20 00:17:16 · 2088 阅读 · 0 评论 -
侯捷STL学习笔记(一)
《STL源码剖析》的作者侯捷STL和标准库的区别第二节:STL六大部件1)迭代器将容器和算法结合起来2)分配器实现,适配器用的地方很多实例:理解容器的前闭后开的设计。迭代器类似于指针,很多操作和指针差不多++,--运算。vec.begin(),vec.end() 指向容器最后一个元素的下一个位置,解引用*(vec.end())错误!auto...原创 2018-08-24 03:28:11 · 3921 阅读 · 0 评论 -
侯捷STL学习笔记(二)
延续上一篇继续写:1)测试deque2)双向开口,是分段连续,感觉是连续的,其实不是。3)内存上两边都可以扩充4)每次512扩充,两边扩充申请buffer,buffer由指针指向max_size由限制,使用全局的sort排序 #include &amp;lt;deque&amp;gt; #include &amp;lt;stdexcept&amp;gt; #include &amp;l原创 2018-08-24 03:55:19 · 635 阅读 · 0 评论 -
侯捷STL学习笔记(三)--序列容器测试
使用容器multiset(允许元素重复)内部是红黑树,insert操作就保证了排好了序。 标准库有个::find()函数,大家都可以用。容器本身也有一个c.find(),通过键值对查找非常快!测试#include <set>#include <stdexcept>#include <string>#include <cstdlib&...原创 2018-08-24 04:38:49 · 341 阅读 · 0 评论 -
面向过程和面向对象的区别
面向过程程序设计:数据结构 + 算法主要解决科学计算问题,用户需求简单而固定特点:分析解决问题所需要的步骤 利用函数实现各个步骤 依次调用函数解决问题问题:软件可重用性差 软件可维护性差 构建的软件无法满足用户需求面向对象程序设计:由现实世界建立软件模型将现实世界中的事物直接映射到程序中,可直接满足用户需求特点:直接分析用户需求中涉及的各个实...原创 2018-08-31 09:16:52 · 248 阅读 · 0 评论 -
C++封装继承多态
封装也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 把对象的属性和服务结合成一个独立的系统单元。 尽可能隐蔽对象的内部细节。对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。继承继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。 定义:特殊类的对象拥有...原创 2018-08-31 10:00:28 · 456 阅读 · 0 评论 -
mvc框架优缺点
什么是MVC框架? 1、什么是mvcModel View Controller,是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里,在改进和个性化定制界面的及用户交互的时候,不需要重新编写业务逻辑。mvc用于映射传统的输入、处理、输出功能在一个逻辑的图形用户界面的结构中。mvc就是类似三层的一种架构,主要采用封装(分...原创 2018-09-11 15:53:30 · 27015 阅读 · 0 评论 -
UML(统一建模语言)
软件设计和软件工程任何事情都要先想清楚了才能做,软件开发更是如此!软件开发过程不可能一上来就开始盲目写代码,写代码之前必须搞清楚下面一些基本问题:1、要做什么?2、做成什么样?3、怎么去做?软件设计: 把软件开发想清楚的过程.软件工程: 对软件开发全过程进行建模和管理.模型模型: 对问题的书面上的无歧义文字或图形的描述.简言之, 模型是对现实的简化. 通过模型, 人们可以了解所研究...原创 2018-09-23 21:15:37 · 32964 阅读 · 1 评论 -
单例模式
为什么使用单例模式在应用系统开发中,我们常常有以下需求:在多个线程之间,比如初始化一次socket资源;比如servlet环境,共享同一个资源或者操作同一个对象 在整个程序空间使用全局变量,共享资源 大规模系统中,为了性能的考虑,需要节省对象的创建时间等等。 因为Singleton模式可以保证为一个类只生成唯一的实例对象,所以这些情况,Singleton模式就派上用场了。2....原创 2018-09-24 13:54:43 · 117 阅读 · 0 评论 -
简单工厂与工厂模式
什么是简单工厂模式简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。模式中包含的角色及其职责1.工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。2.抽象(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例...原创 2018-09-24 14:56:09 · 126 阅读 · 0 评论 -
C++内存模型(二)
单一虚拟继承#include &lt;stdio.h&gt;typedef void(*Fun)(void);class GrandFather{public: GrandFather():age(60){} int age;};class Father : virtual public GrandFather{public: ...原创 2018-10-24 23:04:17 · 136 阅读 · 0 评论 -
C++对象的生命周期
1. 对于全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。2. 对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。3. 对于静态(static)对象,当对象诞生时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。4. 对于以new方式产生出来的局部对象,当...翻译 2018-12-24 07:29:59 · 4789 阅读 · 0 评论 -
VS动态库和静态库的制作
引言什么是库:库是写好的现有的,成熟的,可以复用的代码。所谓静态、动态是指链接。将一个程序编译成可执行程序的步骤:静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。为什么还需要动态库?空间浪费是静态库的一个问题。1、另一个问题是静态库对程序的更新、部署带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序...翻译 2018-12-26 00:15:44 · 385 阅读 · 0 评论 -
命令界面查看C++类内存布局
基本使用方法VS 编译器(这里使用的是:VS 2012)可以通过”开发人员命令提示“查看 C++ 类的内存布局,非常有用。#include <iostream>using namespace std;class Fun{public: virtual void show() { cout<<"hello,world"<<endl; }...原创 2019-01-08 19:10:41 · 1170 阅读 · 0 评论 -
C++11常用特性(1)
1、关键字及新语法1.1、auto关键字及用auto关键字能做什么?auto并没有让C++成为弱类型语言,也没有弱化变量什么,只是使用auto的时候,编译器根据上下文情况,确定auto变量的真正类型。auto AddTest(int a, int b) { return a + b;}int main(){ auto index = 10; ...原创 2018-08-18 15:39:32 · 301 阅读 · 1 评论