C++
_忽如一夜春风来
Talk is cheap,Show me the code !
展开
-
线程池实现
#include <iostream>#include <windows.h>#include <vector>using namespace std;class ThreadPool{public: virtual bool StartThread(int threadCount) { bool ret = true; for (int i = 0; i < threadCount; ++i) { m_threadRun =.原创 2020-12-08 09:13:18 · 122 阅读 · 0 评论 -
引用
引用操作引用&只有在声明引用时是引用操作符, 其余的都是取地址操作符引用和指针的差别指针是一个变量, 可以在赋值指向别处的地址建立引用必须进行初始化绝不会再关联其他不同的变量没有空的引用但是有空的指针void引用是不合法的void &a = 3: void 只是在语法上相当于一个类型, 本质上不是类型, 但是没有任何一个变量或对象,其类型为voi...原创 2019-01-09 08:12:41 · 227 阅读 · 0 评论 -
内联函数
内联函数关键字: inline也叫镶嵌函数函数调用需要建立栈内存环境, 进行参数传递, 并产生程序执行转移, 这些工作都需要一些时间开销, 有些函数使用频率高, 但是代码很短c++提供inline函数, 减少函数调用成本.编译器看到inline后, (一般)为该函数创建一段代码, 以便在后面每次调用都用一段代码来替换, 内联函数的初衷是为了空间换取时间的更快, 所以不能在内联函数内加上...原创 2019-01-09 08:13:22 · 3500 阅读 · 1 评论 -
构造函数和析构函数
类的对象的初始化只能由成员函数来进行建立对象的同时, 自动调用构造函数用类名而作为构造函数比较合适默认构造函数c++规定每个类都有一个构造函数默认构造函数(如果是全局对象就是零,其余的给对象的初始值为不确定值)只要提供了构造函数就没有默认构造函数构造函数没有返回值并且可以重载构造函数在创建对象的时候自动调用构造函数的初始化列表最好按照在类中的声明顺...原创 2019-01-09 08:14:05 · 110 阅读 · 0 评论 -
函数指针
/* 时间: 2018/11/12 书籍: c++ primer 第五版 部分c++11标准*函数指针顾名思义如何定义一个函数指针?把函数名换成指针即可int minus(int a,int b);int (*pf_minus)(int,int);//指向含有两个int形参返回值为int的函数如何用typedef来表示//表示pf_minus就是指向含有两...原创 2019-01-09 08:14:57 · 121 阅读 · 0 评论 -
动态数组
new和数组/* 1. c++ 提供了两种一次分配一个对象数组的方法, C++定义了另一种new 的表达式,可以分配并初始化一个对象数组 标准库中有一个allocator类, 允许我们将分配和初始化分离 2. 动态数组是new在分配的时候可以带入参数 void f(int a[]) { int *p = new int[sizeof(a)]; //载入的参数不同每次分配的数...原创 2019-01-09 08:16:08 · 162 阅读 · 0 评论 -
windows多线程之CreateThread与_beginthreadex区别
使用多线程非常容易, 以前在linux上学习的时候没有这么详细的区分, 也没有深入的了解多线程, 在linux上只要包含头文件pthread即可, 最近学习windows上才有了很多区分, 例如C++11 新标准的头文件<thread>也是可以创建多线程或者windows.h中的CreateThread和_beginthreadex两个都是可以创建多线程的#include <...原创 2019-01-25 09:46:11 · 386 阅读 · 1 评论 -
环形缓冲区
本文缓冲区部分总结网上多个文章, 线程锁为原创环形缓冲区环形缓冲区的定义环形缓冲区: 存储数据的环状区域, 存储结构分为多种, 可以采用不同的数据结构实现, 特点是读和写是分开的, 写入数据之后可先不去读取, 读取数据完毕后就丢弃例如我们用数组的方式定义来说char circleBuff[256] = {0};/* code*///写入数据到某一位circleBuff[...原创 2019-01-23 10:51:38 · 694 阅读 · 0 评论 -
贪心算法
贪心算法之prim在某地分布着N个村庄,现在需要在N个村庄之间修路,每个村庄之前的距离不同,问怎么修最短的路,将各个村庄连接起来解决上述问题称为prim算法, 他是一种产生最小生成树的算法, prim在定点选择利用了贪婪算法//如图解决上述问题, 要求最短#include <iostream>#include <vector>//不可达距离const int...原创 2019-01-29 16:40:03 · 187 阅读 · 0 评论 -
类和对象的理解
类和对象结构化程序设计程序 = 算法 + 数据结构算法第一, 数据结构第二面向对象程序设计程序 = 对象 + 对象…每个对象负责一组相关任务面向对象编程开发范式特性程序之间彼此发送消息万物皆对象每个对象都有自己的内存空间每个对象都有自己的类型概念类类是创建对象的模板和蓝图类是一组类似对象的共同抽象定义对象对象是类的实例化结果对象...原创 2019-01-29 16:44:07 · 327 阅读 · 0 评论 -
顺序容器操作
从标准输入读取string序列, 存入deque, 编写一个循环, 打印deque 的元素#include <string>#include <deque>#include <iostream>int main(){ std::deque<std::string> dq_str; std::string temp; ...原创 2019-01-29 16:46:44 · 122 阅读 · 0 评论 -
多线程理解<1>-并发以及基本概念
并发的概念系统同时执行多个任务, 以往计算机都是单核的CPU在某一时刻只能处理一个任务, 不是正真的并发, 每秒钟多次切换任务,假象上的并发,这种上下文的切换是存在时间开销的(需要保存切换的时候中间状态,进度等信息,当切换回来的时候复原这些信息)随着硬件的发展, 出现了多处理器计算机, 用于服务器和高性能计算领域, 在一个芯片上有多个CPU, 这个时候就能实现真正的并行多个任务使用并发...原创 2019-02-19 21:46:35 · 243 阅读 · 0 评论 -
模板的特化和偏特化
模板特化函数模板特化解决开发过程中由于要对特殊类型做特殊的处理, 不能直接使用函数模板,例如,当我们判断两个值是否相等的时候, 普通的变量和字符串或者类的比较就需要单独特化,来做相应的处理.template <typename T>bool isEqual(T va1,T va2){ return va1 == va2 ? true : flase;}//特...原创 2019-09-02 20:25:38 · 393 阅读 · 0 评论 -
泛型编程
函数模板泛型编程: 独立于特定类型的方式编写代码模板是泛型编程的基础STL/Boost含有大量模板现在框架大多都是用了模板类模板和函数模板模板使程序员能够快速建立具体类型安全的类库和函数集合, 方便大规模的软件开发泛型编程定义模板: 模板是为了解决除了函数参数类型不同其余相同的一类函数而出现的#include <iostream>template ...原创 2019-01-09 08:12:00 · 1074 阅读 · 0 评论 -
c++深入理解const以及相关联的引用知识
/*时间: 2018/11/12书籍: c++primer 第五版 c++11标准*/const的分类const分为两种, 一种是底层的const, 一种为顶层的const底层const底层的const表示指向是常量, 指针本身是变量或者变量顶层const顶层const表示指针本身是常量, 指向为变量或者常量const的赋值含义//省略头文件以及命名空间...原创 2019-01-07 19:24:29 · 256 阅读 · 0 评论 -
智能指针
shared_ptr 和 unique_ptr/* 头文件: <memory> //shared_ptr unique_ptr make_shared.... 智能指针: 当计数器到达0时, 自动释放指针所占内存, 分为两种 1. shared_ptr: 允许多个指针指向同一个对象, 若加入一个指针指向那么计数器++,若减少一个计数器--, 当计数器到达0时, 会自动释放指针所...原创 2019-01-07 19:18:00 · 144 阅读 · 0 评论 -
C/C++可变参数列表
C语言 可变长参数//包含头文件 <stdarg.h>int sum(int nu,...){ va_list ap; int n, m = 0; va_start(ap,num); while(num-->0) { n = va.arg(ap,int); m += n; } va_end(ap); return ...原创 2019-01-07 19:19:06 · 2463 阅读 · 0 评论 -
C++thread类探究
关thread 是C11新标准的类介绍之前熟悉异常的使用也是很重要的头文件exception 和 stdexcpet是c++11处理异常的头文件/* 当我们通过throw返回异常的时候, 如果是线程的异常不能通过在主函数里面捕捉, 这样是捕捉不到的, 因为可能异常出现的时候主函数以及运行完毕了, 到时候没有接受到异常 所以采用如下方法*/#include <thread>...原创 2019-01-07 19:20:27 · 206 阅读 · 0 评论 -
编译错误
解析问题/* 无法解析外部符号,改符号在_main中被引用 1. 因为开始创建源文件的时候添加的是头文件, 然后重命名为.cpp, 然后编译出现如下情况, 如果把头文件和 函数声明放在main.cpp函数里面的时候是没有问题, 可以通过编译的 解决方法: 重新创建一个.cpp的对应类的声明, 重新编译无问题. 2. 当类中出现了static变量的时候, 要在.cp...原创 2019-01-07 19:21:10 · 219 阅读 · 0 评论 -
恐怖的野指针
在C++类中出现野指针大概率是浅拷贝的问题/*1.浅拷贝的意思是类中成员有部分是在对上申请的空间赋值, 然后当直接用一个对象对另一个对象赋值的时候, 如果没有重载运算符或者重写拷贝构造函数, 那么就会按照位复制的方法, 那么此时类中的成员指向的是同一块内存空间,如果其中一个类被释放, 调用了析构函数, 那么另一个类指向了一片被释放的空间, 此时如果这个类也被释放了, 那么系统就会提示二次释放,...原创 2019-01-07 19:21:49 · 300 阅读 · 0 评论 -
虚表指针
#include <cstdio>class Base {public: virtual void f() { cout << "Base::f" << endl; } virtual void g() { cout << "Base::g" << endl; } void h() { cout &a原创 2019-01-07 19:22:26 · 193 阅读 · 0 评论 -
迭代器
构成迭代器的范围有何限制迭代器的范围未左闭右开的范围, 及end() 指向是最后一个元素的后一个元素我们可以通过递增begin()来到达end(), 若两个相等表示容器未空, 指向首元素,编写函数, 通过一组迭代器找到范围里面你的某个值, 如果没有找到处理返回值的情况, 如果找到了返回迭代器#include &lt;iostream&gt;#include &lt;vect...原创 2019-01-07 19:23:24 · 153 阅读 · 0 评论 -
顺序容器操作
从标准输入读取string序列, 存入deque, 编写一个循环, 打印deque 的元素#include <string>#include <deque>#include <iostream>int main(){ std::deque<std::string> dq_str; std::string temp; ...原创 2019-01-07 19:24:03 · 102 阅读 · 0 评论