- 博客(37)
- 收藏
- 关注
原创 记录一次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 755 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 516
原创 c++列表初始化为什么更快
列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行。...
2021-07-14 15:44:36 185
原创 关于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 1173
原创 关于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 690
原创 关于STL中空间配置器中free_list的理解
freeList是一个元素类型为obj*的数组,freeList[i]代表着一串内存区块链表(注,为了方便说明,把这里的一大块空间称为一个链表,因为它有着与链表类似的表现形式,为了更好的突出链表的形式,上图中的两个区块没有连接在一起。实际上这一块空间是连续的,而链表中的两个节点在内存上不一定是连续的,需要注意)的首地址,每串区块的区块大小是不同的。假设freeList[0]代表一串区块大小为8的区块串,则它有可能是如下的形式可以看出,在一个区块链表中,每两个obj 对象之间的首地址的差值为一个区块的
2021-07-07 22:44:42 2645 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 439 4
原创 c++ primer 9.37为什么list或array没有capacity成员函数
vector容器是有capacity成员函数的,原因是vector需要支持通过索引对元素的随机存取功能,因此需要分配一块地址连续的内存空间,由于push_back()这样的操作,如果在push_back()操作时为新元素分配空间,则不能保证此时分配的空间与先前的空间是地址连续的,如果为已有的元素和现在新加入的元素重新分配一块连续的空间,再进行拷贝,则十分缓慢。综上,vector在实现时总是会多分配一些空间,作为预留的空间。回归正题,由于list不要求对元素的随机存取,因此不用额外分配空间,也就没有cap
2021-07-04 19:59:44 290
原创 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 116
原创 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 152
原创 vector的erase函数的陷阱
在下面的代码中,我试图用erase删除vector中的所有值为偶数的元素。根据c++primer 11,erase的返回值是指向被删除元素之后元素的迭代器。根据我的想法,我认为既然是删除一个元素,那么该被删除元素之后的所有元素都会往前移动一个位置,因此在删除该元素后,指向该被删除元素的迭代其器变成指向下一个元素的迭代器,但是却出现了错误。晚上的解答是使用erase(p)之后,p变为无效状态。#include <iostream>#include <string>#incl.
2021-07-02 11:05:56 234
原创 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 266
原创 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 301
原创 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 136
原创 重载赋值运算符时为什么需要返回引用类型?
c++ primer P492:赋值运算符的行为与复合版本(什么是复合版本)的类似,左侧运算对象和右侧运算对象的值相等,并且运算符应该返回它左侧运算对象的一个引用。疑问:为什么要返回左侧运算对象的引用,返回它的拷贝不行?参考其他人的博客:Jessica要努力了。。:c++赋值运算符为什么要返回引用?做出以下的总结:重载赋值运算符时不一定非得返回左侧运算对象得拷贝,但是如果不这样做出错的风险会加大。当类没有指针类型的成员时返回左侧对象拷贝不会出错,代码如下:Test.h#pragma once
2021-05-17 19:59:16 1739 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 237
原创 迭代器以及普通指针*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 89
原创 蓝桥杯 算法提高 拯救Andy BFS C++
思路:首先将所有的绿洲加入队列中,每次从队列中取一个元素,查询周围的8个坐标(需要注意边界条件)的最小距离是否可以被更新,如果相邻坐标被更新则将该坐标加入队列中。代码:#include<iostream>#include<vector>#include<queue>using namespace std;#define MAX 100000000struct Pos{ int x, y;};void bfs(queue<Pos>&
2021-05-14 21:16:13 246
原创 隐式销毁一个内置指针类型成员不会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 257
原创 等号运算符只能重载为成员函数
如果将=运算符不定义为成员函数,那么此时的=是否还是赋值运算符。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 646 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 318
原创 蓝桥杯翻硬币的一些数学推导
主要推导一下字符不同的数量为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 464
原创 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 2603 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 253
原创 论文阅读:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、为什么要提出膨胀卷积二、膨胀卷积原理三、多尺度上下文聚合四、Front-end五、实验部分训练front-end对两种context module进行评估总结前言之前看过一些论文里面都有提到dilated convolution,看了一下这篇论文,顺便记录一下。下面将dilated convolution直接翻译为膨胀卷积。一、为什么要提出膨胀卷积在图像分割领域,图像分割要求在全分辨率上进行操作。研究者通过实验发
2021-01-15 16:29:22 1173 1
原创 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 2330
转载 leetcode第509题:斐波那契数列
题目链接这道题其实不难,甚至有人使用了O(1)的解法,但是在官方解法里看到一个使用通项公式的解法,该方法涉及到特征方程的知识,虽然之前有信号与系统,但是已经还给老师了。于是在网上查了一下,关于递推数列的通项解,这篇知乎说得很详细【数列】特征方程与特征根。写这篇博客主要是记录一下,有空的时候还要复习一下信号与系统。...
2021-01-04 15:46:18 80
转载 数据结构(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 347
原创 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 1864
翻译 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 463
原创 mmdetection设置检测结果可视化边框颜色
vim mmdet/models/detectors/base.py:/show_result
2020-11-04 09:45:28 3680 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人