自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 muduo库的TcpConnection类剖析

TcpConnection是muduo中最为复杂的类,其实就是对已连接套接字的一个抽象。TcpConnection使用Channel来获得socket上的IO事件,它可以自己处理writable事件,而把readable事件通过MessageCallback传达给客户。在TcpConnection析构时候会close(fd)(在Socket析构函数中发生)。

2020-12-12 16:21:03 2696 6

原创 GoLang sort.Slice重写比较函数分析

先看一个sort.Slice重写比较函数的例子sort.Slice(intervals, func(i, j int) bool { // 闭包 return intervals[i][0] < intervals[j][0]})注意到上面的Slice的第二个比较函数就用到了闭包,引用了intervals,要注意这里的intervals会通过后面的less函数间接操作。我们再来看一下Slice的源码部分,any是type any = interface{} 空接口efacefunc Sl

2022-03-19 22:22:42 762

原创 ProtoBuf介绍

最近在工作中接触到了Google的.proto文件编写,因此对其进行简单的汇总。protocol buffer 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffer 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML更小(3 ~ 10倍)更快(20 ~ 100倍)更为简单自动生成更易于以编程方式使用的数据访问类你指定的 message 字段可以是下面几种情况之一:required: 格

2021-01-10 21:39:33 470

原创 C++ 容器迭代器失效

recently面试被问到迭代器失效,今天就对迭代器相关进行总结。首先看一个小例子:void testInsert() { vector<int> v; int word; auto iter = v.begin(); while (cin >> word) iter = v.insert(iter, word);//依次将元素插入最前端 cout<<v.front(); return;}看一下in

2020-12-20 20:40:40 224

原创 muduo库的线程池ThreadPool剖析

EventLoopThreadPool也是派生自noncopyable,其用于创建IO线程池,用于把TcpConnection分派到某个具体的EventLoop线程上。EventLoopThreadPool是TcpServer的成员,生命周期由后者控制。EventLoop我们应该很熟悉,也就是整个muduo库的核心,就是Reactor模式当中的Dispatcher(事件分发器),具体至EventLoop章节进行详细分析。

2020-12-14 19:22:03 341

原创 Leetcode C++二维数组初始化问题

leetcode 二维数组初始化问题发现可以用如下语句初始化二维数组int dp[m][n];存疑,待解答

2020-12-03 23:09:30 456

原创 C++ 模板类成员在派生类中的调用

以从Graph类派生出的UndiGraph类为例:class Graph//基类{protected: int maxVertexes; int Vertex_num; int Edge_num; bool Weight; bool Directed; bool Vertex_value; public: //static const E maxWeight = INF; Graph(int size = 30); Graph(const

2020-10-06 21:24:27 340

原创 C++ const成员函数

Const关键字const可以用于替换#define使用宏定义可能并不会加入记号表(symbol table)例如:#define PI 3.14159const double Pi = 3.14159;而对于const与指针同时出现的情况:如果const在’ * ’ 左侧,则被指物为常量;如果const在’ * '右侧,则指针本身为常量;如果出现两次,则都为常量。const TreeNode* root;//TreeNode const * root;//exactly the sam

2020-08-18 11:26:43 425

原创 C++ 函数与二维数组

将二维数组作为参数的函数,数组名被视为地址,所以形参就应该是一个指针。sum(int arr[][4],int size);sum(int (*arr)[4],int size);以上这两种表示方式是相同的int *arr[4]表示的是由4个指向int的指针组成的数组,而不是由一个指向4个int组成的数组的指针。因此括号是很必要的。同样我们能看出,arr都是指针而非数组,是由4个int组成的数组。函数参数中的指针类型指定了数组的列数,因此sum()函数只能接受由4列组成的数组,但是长度却是

2020-06-16 23:07:03 588

原创 C++运算符重载——重载限制 及 重载输出类对象

使用运算符时,不能违反原来的语法规则,不能修改优先级sizeof运算符.*?:::等运算符不能重载。= () [] ->只能重载为成员函数。在上一节基础上Time Time::operator-(const Time& t)const { int tot1, tot2; tot1 = t.minutes + t.hours * 60; tot2 = minutes + hours * 60; Time diff(abs(tot2 - tot1) / 60, abs(

2020-06-13 21:04:26 497

原创 C++运算符重载——以时间类为例

计算时间,记录运算符重载例子,声明定义分离注: template class一般不建议将声明和定义分离,否则要include实现文件才能正常使用非静态成员函数后面加const关键字,用来限定“this”指针为const,唯一例外是被mutable修饰的成员变量(后续再提)。mytime.h 代码#pragma once#ifndef MYTIME_H_#define MYTIME_H_class Time {private: int hours; int minutes;public:

2020-06-10 17:16:00 804

原创 build-essential作用(Ubuntu)

若在Ubuntu 安装C++ 编译环境只需要安装build-essential即可,作用是提供编译程序必须软件包的列表信息apt-cache show build-essentialapt-cache depends build-essential参考https://www.cnblogs.com/bing-yu12/p/6384447.html...

2020-06-04 12:39:21 952

转载 C++ 模板类成员调用 this指针

在C++中如果父类是模板类,直接调用父类成员的话,会报错找不到该变量,其根本原因是因为模板的二次编译机制导致的。其父类的声明template <typename T>class SeqLis...

2020-06-03 13:32:37 1249

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除