- 博客(27)
- 收藏
- 关注
原创 银行家算法C语言实现(纯记录
#include<stdio.h>#include<time.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#define True 1#define False 0const int left = 0;const int right = 9; enum State{ Error, Block, Success};int generatin
2022-05-14 21:36:06
1167
1
原创 C++变长参数解包与std::tuple的遍历输出
介绍几种常用的变长参数解包的方法:递归解包template<typename Arg>void print1(const Arg& arg){ std::cout<<arg<<std::endl;}template<typename Arg,typename ...Args>void print1(const Arg& arg,const Args& ...args){ std::cout<<
2022-02-10 21:03:41
1432
1
原创 C++17结构化绑定
众所周知,go语言中函数返回多个值很方便,接收函数返回的多个值也很方便,例如:func f() (string,int){ return "Naruto",18}func main(){ name,age := f()}而在C++中,首先想到的办法是使用结构体,例如:struct Person{ std::string name; int age;};auto f(){ return Person{"Naruto",18};}auto person = f
2022-02-09 11:38:01
603
原创 GoLang json格式化输出
简单记录一下go语言json格式化输出的办法import ( "bytes" "encoding/json" "fmt" "os")type Complex_Type struct{ Age int `json:"age"` Name string `json:"name"` Grades map[string]int `json:"grade"` Parents []string `json:"parents"`} grades := map[string]int{ "m
2022-01-28 22:50:05
5093
原创 C++11线程池探索
最近在学习线程池(基于C++11),了解了线程池的大概框架后便开始动手写,胡思乱想了很多种写法,也走了很多弯路,以下是学习过程:zii ThreadPool1.0#pragma once#include<mutex>#include<condition_variable>#include<thread>#include<assert.h>#include<vector>#include<memory>#include&
2021-11-18 15:00:52
343
原创 Linux父子进程的管道通信与共享内存的使用
#include<sys/mman.h>#include<unistd.h>#include<cstdio>#include<sys/socket.h>#include<assert.h>#include<string.h>#include<string>#include<vector>#include<thread>#include<chrono>#include&l
2021-11-04 15:25:30
396
原创 Linux 下基于epoll的简单回射服务器
#include<arpa/inet.h>#include<cstdio>#include<assert.h>#include<fcntl.h>#include<sys/socket.h>#include<vector>#include<unordered_map>#include<string.h>#include<string>#include<sys/epoll.h>
2021-10-27 22:38:58
125
原创 消息传递解决生产者-消费者问题(C++)
Util.h#pragma once#include<string>#include<vector>#include<mutex>#include<condition_variable>#define Max 100static const std::vector<std::string>Fruit{ "apple", "pair", "orange"};struct Message{ s
2021-10-05 14:29:27
725
2
原创 判断两台设备是否属于同一子网的简易程序(C++实现)
给定ip地址与子网掩码,通过与运算判断是否属于同一子网:#include<iostream>#include<string>#include<vector>namespace Address{ class Ip_Mask_Address { public: explicit Ip_Mask_Address(const std::string& ipaddress
2021-09-18 21:51:26
247
原创 C++单例模式(懒汉模式)实现
这是两种典型的懒汉模式(防止资源泄露)的实现,但不保证线程安全类内嵌套自定义的用于释放资源的类#include<iostream>class Singleton{public: static Singleton* get_singleton(){ if(Singleton::singleton == nullptr){ Singleton::singleton = new Singleton(); }
2021-09-12 10:19:27
319
原创 C++模拟距离向量路由选择算法(DV算法)
#include<iostream>#include<vector>#include<string>#include<windows.h>#define Inifinity 65535class NetNode {public: friend class DV;private: std::vector<std::vector<int>>direction_vector; struct info {
2021-09-10 22:15:46
1873
原创 Effective C++ 条款15、16、17
条款15:在资源管理类中提供对原始资源的访问当你需要获取资源管理类中的原始资源时,一般由RAII class提供显示转换或隐式转换。auto_ptr和shared_ptr都提供了一个get成员函数,用来执行显示转换,也就是它会返回智能指针内部的原始指针(的复件)显示转换:class Font{public: ... FontHandle get() const {return f;}//显示转换函数,即提供一个获取原始资源的接口 ...private: FontHandle f;}
2021-08-20 16:32:46
178
原创 Effective C++ 条款13,14
条款13:以对象管理资源void f(){ Investment* pInv=createInvestment();//调用factory函数 ... delete pInv;}该段代码可能存在的问题:"…"区域内有一个过早的return语句“…”区域内的语句抛出异常将会使得资源泄露。为确保资源总是被释放,可把资源放进对象内 ,依赖C++的“析构函数自动调用机制”确保资源被释放。智能指针的实现便应用了以上思想:void f(){ std::auto_ptr<Investm
2021-08-19 17:25:00
235
原创 Effective C++条款12
条款12:复制对象时勿忘其每一个成分#include<iostream>class Date{public: Date()=default; Date(const int&month,const int&day) :m_month(month),m_day(day) {} void Init_Date() { std::cout<<"Please input month and d
2021-08-18 17:48:16
266
原创 Effective C++条款10,11
条款10:令operator=返回一个reference to *this为了实现“连续赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参,这是你为classes实现赋值操作符时应该遵循的协议Widget& operator=(const Widget& rhs){ ... return *this;}这个协议不仅适用于以上标准赋值形式,也适用于所有赋值相关运算(如+=)请记住:令赋值(assignment)操作符返回一个reference to
2021-08-17 22:31:44
182
原创 Effective C++ 条款08,09
条款08:别让异常逃离析构函数以下是一个将(必须要求调用的)close()函数置于析构函数内的demo:#include<iostream>class DtorExcetion{public: DtorExcetion()=default; DtorExcetion(int*data,const int&length) :m_length(length) { m_data=new int[m_length]
2021-08-14 22:53:10
132
原创 Effective C++ 条款07
条款07:为多态基类声明virtual析构函数一个factory模式下以Dog为base class的demo:#include<iostream>#include<cstdio>class Dog{public: Dog(){std::cout<<"Based ctor!"<<std::endl;} ~Dog(){std::cout<<"Based dtor"<<std::endl;}protected:
2021-08-12 23:10:11
275
原创 Effective C++ 条款05、06
条款05:了解C++默默编写并调用哪些函数如果写下:class Empty(){ };就好像你写下:class Empty{public: Empty()=default;//default构造函数 Empty(const Empty&rhs){...}//copy构造函数 ~Empty(){...}//析构函数 Empty& operator=(const Empty&rhs){...}//copy assignment操作符};
2021-08-11 16:37:52
224
原创 Effective C++ 条款04
条款04:确定对象被使用前以先被初始化最佳的处理办法是:永远在使用对象之前将它初始化。1.内置类型手工完成2.自定义类型通过构造函数完成注意:不要混淆了赋值(assignment)和初始化(initialization)对象的成员变量的初始化动作发生在进入构造函数本体之前(对象的默认构造函数将被调用)用member initialization list(成员初值列)替换赋值动作使用成员初值列调用对象的拷贝构造函数进行初始化,效率高于先调用默认构造函数再进行赋值的操作Defaul
2021-08-09 17:14:19
180
原创 Effective C++ 条款03
条款3——尽可能使用constconst修饰的各种类型char greeting[]="Hello"; char* p=greeting;//non-const pointer,non-const data const char*p=greeting;//non-const pointer,const data char* const p=greeting;//const pointer,non-const data const char*const p=greeting
2021-08-06 22:21:23
230
原创 Effective C++条款01、02
条款01——视C++为一个语言联邦将C++拆分为以下四种次语言:CObject-Oriented C++Template C++STL请记住:C++高效编程守则视状况而变化,取决于你使用C++的哪一部分条款02——尽量以const,enum,inline替换#define可理解为“宁可以编译器替换预处理器”。假设定义一个宏常量:#define PI 3.1416,若此定义未被编译器看见,且假设定义该常量的头文件并非你所写,编译器给出的错误信息也许只提到3.1416而无PI,故很难追
2021-08-03 18:00:20
544
原创 Effective C++ 条款00
Effective C++ 条款00——导读(在构造函数前)使用关键字explicit以避免不希望出现的隐式转换示例:class Widget{public: explicit Widget(int x=0,bool y=true){}};void Func(Widget widget){ std::cout<<"Func is called!"<<std::endl;}Func(20);//错误,int 20无法通过构造函数隐式转换成Widget obj
2021-08-01 17:11:21
94
原创 C++Dijkstra算法求最短路径
#pragma once#include"MGraph.h"#include<iostream>#include<vector>using namespace std;class Dijkstra {public: Dijkstra() = default; ~Dijkstra() = default; void DijkstraAlgorithm(const MGraph&M) { //init data for (int i = 0;i <
2021-05-14 14:37:38
472
原创 C++Kruskal算法求最小生成树
C++Kruskal算法求最小生成树刚开始写Kruskal算法时,苦于无法解决如何判断并入的最短路径是否形成回路的问题,卡了很久。后来学习了并查集的概念,才明白并查集是Kruskal算法的关键。并查集用于判断元素是否处于同一集合中,在Kruskal算法中可用于判断是否存在环。并查集可定义为一个一维数组parent,初始化时令parent[i]=i;即此时自身为一个单独的集合。查询:int Find(int x,int* visited) { int root = x; while (ro
2021-05-11 16:20:24
522
原创 C++Prim算法求最小生成树
C++Prim算法求最小生成树MGraph.h#pragma once#include<iostream>#include<vector>#include<string>using namespace std;constexpr auto Infinity = 63353;class MGraph {public: MGraph() = default; ~MGraph() = default; void CreateMGraph() { c
2021-05-07 19:25:24
2102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人