自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ubuntu20.04搭建opengl开发环境并运行第一个程序

参考《opengl编程指南》第四版。

2023-04-17 21:55:05 489

原创 linux下tcp服务端与客户端实现

使用socket完成linux下服务端与客户端的编写,传输层使用tcp协议,服务端使用多进程实现并发。

2023-02-26 14:34:36 530

原创 zlib压缩原理

zlib压缩算法讲解,包括lz77算法和huffman编码

2023-02-18 09:47:10 3660 1

原创 c++函数指针进阶

c++成员函数指针调用

2023-02-13 23:00:45 319

原创 记录一次leveldb安装失败经历

最近准备学习leveldb的源码,在安装时出现了一些问题按照官方的安装步骤,在执行以下的命令时遇到了错误cmake -DCMAKE_BUILD_TYPE=Release .. && cmake --build .找到出错的第一个位置error: ‘is_trivially_copy_constructible’ is not a member of ‘std’经搜索,发现这是由于gcc/g++的版本过低导致。参考链接。因此升级gcc和g++的版本,参考链接..

2021-08-18 10:11:31 694 1

原创 c++ const_cast转换运算符与volatile关键字

const_cast转换运算符用来去除变量的底层const属性,这里的变量的类型是指针或者引用类型,因为普通类型并没有底层const属性这个说法。const_cast使用实例:代码转自:IT男汉:C++ const_cast用法#include<iostream>using namespace std;void ConstTest1() { const int a = 5; int *p; p = const_cast<int*>(&a); (*p)..

2021-07-27 20:26:46 447

原创 c++列表初始化为什么更快

列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。...

2021-07-14 15:44:36 157

原创 关于STL中value_type函数的思考

// 摘自stl_iterator_base.htemplate <class _Iter>inline typename iterator_traits<_Iter>::value_type*__value_type(const _Iter&){ return static_cast<typename iterator_traits<_Iter>::value_type*>(0);}《STL源码剖析》上说的是value_type这.

2021-07-12 15:40:16 1097

原创 关于vector容器的deallocator的思考

从STL源码剖析这本书上得到的vector容器的deallocate函数如下:void deallocate() { // 释放所有的分配的内存,为重新开辟一大段空间做准备,因为vector要求连续的数组 if (start) { data_allocator::deallocate(start, end_of_storage - start); } }这段代码看起来很合理,就是释放[start, end_of_storage)这一段内存空间。现在继续看data_allocato

2021-07-09 15:04:12 594

原创 关于STL中空间配置器中free_list的理解

freeList是一个元素类型为obj*的数组,freeList[i]代表着一串内存区块链表(注,为了方便说明,把这里的一大块空间称为一个链表,因为它有着与链表类似的表现形式,为了更好的突出链表的形式,上图中的两个区块没有连接在一起。实际上这一块空间是连续的,而链表中的两个节点在内存上不一定是连续的,需要注意)的首地址,每串区块的区块大小是不同的。假设freeList[0]代表一串区块大小为8的区块串,则它有可能是如下的形式可以看出,在一个区块链表中,每两个obj 对象之间的首地址的差值为一个区块的

2021-07-07 22:44:42 2575 3

原创 spawn-fcgi: child exited with: 127可能的原因

第一种是动态链接库的问题,请参考https://blog.csdn.net/lucky_huijun/article/details/105165359第二种是没有正确的输入路径名,下面这样的是错误的spawn-fcgi -a 127.0.0.1 -p 9001 -f a.out正确的应该是spawn-fcgi -a 127.0.0.1 -p 9001 -f /a.out如果是第二种错误就打自己一巴掌吧^_^...

2021-07-06 16:45:23 395 4

原创 c++ primer 9.37为什么list或array没有capacity成员函数

vector容器是有capacity成员函数的,原因是vector需要支持通过索引对元素的随机存取功能,因此需要分配一块地址连续的内存空间,由于push_back()这样的操作,如果在push_back()操作时为新元素分配空间,则不能保证此时分配的空间与先前的空间是地址连续的,如果为已有的元素和现在新加入的元素重新分配一块连续的空间,再进行拷贝,则十分缓慢。综上,vector在实现时总是会多分配一些空间,作为预留的空间。回归正题,由于list不要求对元素的随机存取,因此不用额外分配空间,也就没有cap

2021-07-04 19:59:44 263

原创 c++ primer9.32

网上的解释为:参考链接:链接不过我试了下,下面的代码是可以的,暂时不知道原因#include <iostream>#include <string>#include <vector>#include <list>#include <deque>#include<forward_list>using namespace std;int main(){ vector<int> vi = {

2021-07-04 19:39:10 94

原创 forward_lsit的erase操作为什么是删除指定的迭代器之后的元素

问题描述:在forward_list的这个容器中,没有erase接口,只提供了erase_after这个接口。其中erase _after(p)为删除迭代器p指向的位置之后的一个元素。那么为什么不能直接删除当前迭代器指向的元素呢。首先找到STL中slist.h,可以看到iterator erase_after(iterator __pos) { return iterator((_Node*) this->_M_erase_after(__pos._M_node)); }于是

2021-07-04 18:27:03 146

原创 vector的erase函数的陷阱

在下面的代码中,我试图用erase删除vector中的所有值为偶数的元素。根据c++primer 11,erase的返回值是指向被删除元素之后元素的迭代器。根据我的想法,我认为既然是删除一个元素,那么该被删除元素之后的所有元素都会往前移动一个位置,因此在删除该元素后,指向该被删除元素的迭代其器变成指向下一个元素的迭代器,但是却出现了错误。晚上的解答是使用erase(p)之后,p变为无效状态。#include <iostream>#include <string>#incl.

2021-07-02 11:05:56 208

原创 c/c++判断字节序类型

代码来自《Linux高新能服务器编程》#include<stdio.h>void byteorder(){ union { short value; // short为2个字节,共16位 char union_bytes[sizeof(short)]; }test; test.value = 0x0102; if((test.union_bytes[0] == 1) && (test.union_bytes[1]==2)) { printf("b

2021-06-10 11:09:48 238

原创 c语言strcat函数

头文件:#include<string.h>功能:连接两个字符串函数原型:char *strcat(char *dest, const char *src);注意事项:dest需要足够大的空间容纳拼接后的字符串代码示例1:错误的用法,空间分配不足#include<iostream>#include<vector> #include<string.h>#define _CRT_SECURE_NO_DEPRECATE // vs2017中屏蔽警告

2021-06-09 20:38:42 274

原创 c++ 中auto与decltype

#include<iostream>using namespace std;int main(){ const int i = 42; auto j = i; j = 1; cout<<j<<endl; // auto一般会忽略顶层const const auto &k = i; // 明确指定为顶层const //k = 1; // k是const引用 auto *p = &i; // p的类型.

2021-05-29 21:26:05 116

原创 重载赋值运算符时为什么需要返回引用类型?

c++ primer P492:赋值运算符的行为与复合版本(什么是复合版本)的类似,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。疑问:为什么要返回左侧运算对象的引用,返回它的拷贝不行?参考其他人的博客:Jessica要努力了。。:c++赋值运算符为什么要返回引用?做出以下的总结:重载赋值运算符时不一定非得返回左侧运算对象得拷贝,但是如果不这样做出错的风险会加大。当类没有指针类型的成员时返回左侧对象拷贝不会出错,代码如下:Test.h#pragma once

2021-05-17 19:59:16 1617 2

原创 移动构造函数和拷贝构造函数的匹配规则

参考c++ primer第五版的StrVec类拷贝构造函数是StrVec::StrVec(const Strvec& s){...}移动构造函数是StrVec::StrVec(Strvec&& s) noexcept {...} 疑问:在初始化时是如何选择拷贝构造函数和移动构造函数的如StrVec s; // 使用默认构造函数初始化StrVec s1(s); // 这里调用拷贝构造函数还是移动构造函数?答案:c++ primer第五版477页如果一个类既有拷

2021-05-15 20:17:24 220

原创 迭代器以及普通指针*p++和*++p 待进一步探索

迭代器:对于*p++,见C++ primer第五版132页:后置递增的运算符优先级高于解引用运算符优先级,所以*p++等价于*(p++)。执行p++时,先将未递增的p保存下来,然后将p加一个单位,并返回未递增的p。所以*(p++)实际上是对未递增的p进行解引用,用代码解释更明确(STL源码剖析38页):后置递增运算符(it++)的重载如下const INT operator++(int){ INT temp = *this; ++(*this); return temp;}前置递增运算符

2021-05-14 22:40:26 82

原创 蓝桥杯 算法提高 拯救Andy BFS C++

思路:首先将所有的绿洲加入队列中,每次从队列中取一个元素,查询周围的8个坐标(需要注意边界条件)的最小距离是否可以被更新,如果相邻坐标被更新则将该坐标加入队列中。代码:#include<iostream>#include<vector>#include<queue>using namespace std;#define MAX 100000000struct Pos{ int x, y;};void bfs(queue<Pos>&amp

2021-05-14 21:16:13 233

原创 隐式销毁一个内置指针类型成员不会delete它所指向的对象

隐式销毁内置指针类型成员Test.h使用默认析构函数#pragma once#include<iostream>using namespace std;class Test{public: Test() = default; Test(int dt) : data(dt) {} Test(int dt, Test* p) : data(dt), ptest(p) {} void printData() { cout << data; }private

2021-05-14 16:35:38 239

原创 等号运算符只能重载为成员函数

如果将=运算符不定义为成员函数,那么此时的=是否还是赋值运算符。operator=必须是成员函数Test.h#pragma onceclass Test{public: Test() = default;private: int data;};Test.cpp#include<iostream>#include"Test.h"Test operator=(Test a, Test b) // error :operator=必须是成员函数{}int mai

2021-05-14 16:09:17 570 1

原创 使用字符串字面值初始化字符数组需要主意的问题

使用字符串字面值对字符数组进行初始化时,需要注意字符串字面值的类型为const char* 类型,并且以’\0’结尾,所以需要注意字符数组与字符串字面值的长度是否相等。代码如下:#include <iostream>#include <string>using namespace std;int main(){ //char a[6] = "123456"; // error: const char[7]类型的值不能用于初始化"char [6]"类型的实体 char

2021-05-09 10:36:14 282

原创 蓝桥杯翻硬币的一些数学推导

主要推导一下字符不同的数量为2n+1时没有一种解决方法和数量为2n时从第一个开始翻转最后一定可以实现两个字符串相同。设不同的字符数量为kk=2n+1时首先对于k=1这个特殊的例子,很容易想到没有一种解决方案可以使两个字符串相同。k=2n+1,n>0,此时翻转一个不同的字符,k可能有两种变化第一种,k=k,即翻转前相邻位置上的字符是相同的,翻转后相邻位置上的不同了。第二种,k=k-2,即翻转前相邻位置上的字符是不相同的,翻转后相邻位置上的字符相同了。可已看出,在这个过程中k递减且保持为

2021-03-26 17:25:11 404

原创 C++中负数和补码的关系

今天在阅读关于树状数组和线段树的博客时遇到了一个问题:对于一个int类型的正整数x,-x=x补。列如x=6,-x=x补=111110102。看到这里很????,原来C++使用一个数的补码存储它的负数的。可以用下面的代码验证一下,部分代码参考老王生涯:C++输出二进制数:#include <iostream> #include <bitset>int lowbit(int x);void printBinary(int x);int main() { std::cou

2021-01-20 17:11:13 2347 2

原创 蓝桥杯2018省赛A组第五题

这道题在网上很容易找到答案:int n = size / 3;这篇文章主要分析代码递归的逻辑。一碰到递归头真的大!题目如下:#include <stdio.h>#include <stdlib.h>void show(char* buf, int w){ int i,j; for(i=0; i<w; i++){ for(j=0; j<w; j++){ printf("%c", buf[i*w+j]==0? ' ' : 'o'); }

2021-01-19 22:37:50 238

原创 论文阅读:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、为什么要提出膨胀卷积二、膨胀卷积原理三、多尺度上下文聚合四、Front-end五、实验部分训练front-end对两种context module进行评估总结前言之前看过一些论文里面都有提到dilated convolution,看了一下这篇论文,顺便记录一下。下面将dilated convolution直接翻译为膨胀卷积。一、为什么要提出膨胀卷积在图像分割领域,图像分割要求在全分辨率上进行操作。研究者通过实验发

2021-01-15 16:29:22 1084 1

原创 冒泡排序和插入排序傻傻分不清

1

2021-01-13 15:26:04 3143 3

原创 32位机器int变量的最大值和最小值

1.最小值为什么是-2^31。2.最高位为1时一个数为负数还是整数。

2021-01-11 09:32:24 17320 4

原创 C++ string类中的空字符

在做leetcode时发现一个问题。题目如下:题目地址题目不难,很容易做出来。问题出现在自己写的代码里,代码如下:class Solution {public: vector<vector<int>> largeGroupPositions(string s) { vector<vector<int>> result; vector<int> tmp(2, 0); int i =

2021-01-05 15:54:07 2248

转载 leetcode第509题:斐波那契数列

题目链接这道题其实不难,甚至有人使用了O(1)的解法,但是在官方解法里看到一个使用通项公式的解法,该方法涉及到特征方程的知识,虽然之前有信号与系统,但是已经还给老师了。于是在网上查了一下,关于递推数列的通项解,这篇知乎说得很详细【数列】特征方程与特征根。写这篇博客主要是记录一下,有空的时候还要复习一下信号与系统。...

2021-01-04 15:46:18 64

转载 数据结构(C++描述版,金远平编著)习题4.1

题目描述:写一个算法,读入任意一棵树的符号表示,并构建其内部表示。即树的广义表形式转换为链表形式。如由A(B(E(K,L),F),C(G),D(H(M),I,J))表示的树长这个样子:参考博客点击这里代码:Tree.h#pragma once // 防止头文件被多次包含#include <iostream>#include <stack>/*1.定义树结点类TreeNode。2.定义树类,数据成员为一棵树的根,成员函数build为根据一棵树的符号表示创建一

2021-01-01 11:13:08 314

原创 C++ sort()对向量按照某一个指定分量排序

在做一道LeetCode时需要用到sort()排序,题目是这样的:当时想了一个比较简单的方法,即先将输入的vector按照第一个元素进行进行排序, 示例中的数组排好序为[ [1, 2], [1, 3], [2,3], [3, 4]]。排好序过后, 对于相邻的两个区间[a, b]和[c, d],如果这两个区间重叠,则判断b和d哪一个值大一点,去掉值较大的那个区间。其中需要用到sort()排序,在使用sort时遇到两个问题:一是如何按照向量的第一个元素排序二是reference to non-stat

2020-12-31 11:22:12 1783

翻译 Combining Compositional Models and Deep Networks For Robust Object Classification under Occlusion阅读

这是一篇 2020 IEEE Winter Conference on Applications of Computer Vision (WACV)的论文论文地址:https://arxiv.org/abs/1905.11826v4论文主要解决图像中存在遮挡时的分类任务,如下图中的公交车被马赛克遮挡,一般的深度神经网络会错误地分类组合模型...

2020-11-07 10:52:09 420

原创 mmdetection设置检测结果可视化边框颜色

vim mmdet/models/detectors/base.py:/show_result

2020-11-04 09:45:28 3469 5

空空如也

空空如也

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

TA关注的人

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