自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git在Windows 下和Linux下换行符问题

git

2022-12-31 10:47:51 606 1

原创 CMake find_package用法

find_package用法

2022-12-17 12:23:21 174

原创 Python模型评价指标

Python模型评价指标

2022-12-08 16:35:01 217

原创 find,grep命令

linux grep与find命令常见用法

2022-07-14 23:59:27 161

原创 Ubuntu下使用交叉编译器编译能跑在aarch64 rtos上的程序

交叉编译

2022-07-09 13:47:45 312

原创 Linux重定向

Linux重定向

2022-07-06 23:12:49 287

原创 模板特例化

模板特例化

2022-06-21 20:38:14 852

原创 C++ primer 笔记之“解读类型别名声明的语句”

const与类型别名、模板类型参数的组合使用

2022-06-21 18:20:21 236

原创 可变参数模板

C++ 可变参数模板

2022-06-20 20:34:00 112

原创 C++ const修饰符

const qualifier

2022-06-20 11:41:54 205

原创 c++ primer plus 模板笔记

C++ 模板

2022-06-20 11:20:38 188

原创 继承的构造函数

C++类继承中对于基类构造函数的继承

2022-06-15 16:58:57 714

原创 C++ primer plus notebook

C++ primer edition fifth notebook

2022-06-14 21:45:17 83

原创 C++ primer edition 5 笔记

C++ primer plus notebook

2022-06-12 20:38:28 84

原创 容器的swap操作

容器的swap操作

2022-06-08 20:37:00 244

原创 HTTP方法与状态码

request method有:GET:如果有输入参数,一般以明文附加在 url后,多个参数以&间隔,不安全。请求体为空。POST:有请求体,用于对字段更新,可以传送部分数据。PUT:用于替换完整的资源DELETE:删除资源;HEAD:和GET类似,不过不返回响应体。等等;状态码:1XX:提示信息;2XX:成功信息;3XX:重定向信息;4XX:请求错误;5XX:服务器错误;......

2022-06-06 11:55:02 59

原创 C++ 对于容器的添加/删除元素导致迭代器、指针、引用失效

C++ 迭代器失效

2022-06-01 10:54:10 542

原创 C++容器的下标操作与at成员函数的区别

string,vector,deque,array都有下标操作和at成员函数,这俩个的区别是:下标运算符不会检查是否在合法的范围内。如果越界,出现运行时错误。at成员函数会检查是否越界,如果越界,则抛出一个out_of_range异常。...

2022-05-31 20:48:49 438

原创 C++ typename

参考:typename是怎么来的本文测试环境:vs2019,c++ 标准:ISO c++ 14typename通常用作模板的声明中,如下:template<typename T>void f1(T val){}也可以用class说明模板类型参数template<class T>void f1(T val){}class在typename这个关键字之前就已经有了,比如我们常用来定义一个类类型:class c1{};那么既然有了class,为什么还要有typename

2022-05-31 14:50:51 250

原创 C++ Primer 第五版 笔记

P124在表达式求值之前,小整数类型的运算对象被提升成较大的整数类型,所有运算对象最终会被转换成同一类型。一元正号运算符可以作用于指针,不能作用于迭代器,比如:int a=1;int*p=&a;cout<<(+p)<<endl;//相当于取p的值......

2022-05-30 16:42:11 361

原创 宏定义中的#和##

#用于含有参数的宏定义中,用于把参数字符化#define STR(a) #aSTR(a)会被替换为“a"STR©会被替换为"c"##用于拼接标识符#define CON a##bint ab=1;cout<<CON;//等价于cout<<ab;#define CON(a,b) a##bcout<<CON(1,2);//等价于cout<<12;另外##还可以用于可变参数宏定义中;#define f1(format,...) fprintf

2022-05-27 17:10:59 408

原创 利用二分法求值

本文95%的内容参考了博客:https://blog.csdn.net/baiyifeifei/article/details/79166686?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1-79166686-blog-105912429.pc_relevant_default&depth_

2022-05-20 11:16:27 165

原创 C++类内布局与删除堆分配的类对象时的注意点

#//source.cppclass c1{public:int a=10;};class c2{public:int b = 20;};class c3 :public c1, public c2{public:int c = 30;};如上,使用VS2019 的cl -d1reportSingleClassLayoutc3 source.cpp查看c3类布局如下:如果有:c2p2=new c3;delete p2;则运行时会报错;如果有:c1p1=new c

2022-04-21 17:50:03 1166

原创 C++STL中vector,string扩容机制

不同的编译器扩容机制不同;对于vector:g++是2倍扩容,msvc是1.5倍扩容;对于string:如果字符串没有超过15个字节,都是分配在栈上,capacity都是15;一旦超过了15个字节,则分配在堆上,扩容机制:g++是2倍,msvc是每次+16;ps:array是固定大小的,定义的时候要指定大小,因此其数据存放在栈上面;...

2022-04-20 21:19:21 1742

原创 cmake的使用

cmake

2022-04-12 15:49:57 1217

原创 区间DP问题

区间DP

2022-04-09 15:57:50 400

原创 C++ 类中定义子对象时的问题

C++

2022-04-04 22:54:18 842

原创 Linux下的IPC与ITC

IPC:消息队列,共享内存,信号集,管道,套接字,内存映射,信号;前3中如果没有显示销毁,程序结束时仍旧不会被销毁,除非重启或者显示销毁;共享内存和内存映射要保证进程的同步互斥,方法可以使用其它的IPC。同时可以使用信号量,信号集有多个信号量。把信号量创建在共享的内存中,这样就可以通过信号量同步互斥。pthread动态库提供的信号量是sem_t,利用sem_init初始化时,把pshared设置为非零。如下图所示。ITC:凡是IPC的方法,都可以实现ITC,除此之外,还有互斥锁,读写锁,条件变量等。注

2022-04-02 23:31:27 713

原创 linux下pthread_mutex_t使用时的问题

pthread_mutex_t在Linux下有三种类型:fast,recursive,errorcheck,对应的宏是PTHREAD_MUTEX_FAST_NP, PTHREAD_MUTEX_RECURSIVE_NP,PTHREAD_MUTEX_ERRORCHECK_NP,NP是not portable,定义mutex时如果不写,默认是fast,也就是如果已经获得了锁,再次获取会阻塞;pthread动态库里面有用于多线程的一些函数;mutex上锁函数:pthread_mutex_lock,pthrea

2022-04-02 16:00:15 752

原创 C++虚函数

#include<iostream>using namespace std;class c1{public: virtual void f1() { cout << "c1::f1" << endl; } virtual ~c1() { f1(); } void f2() { cout << "c1::f2" << endl;

2022-04-01 21:01:19 343

原创 C++ 中模板类enable_shared_from_this<T>

C++

2022-04-01 20:25:59 655

原创 TCP发送大小

TPC一次可以发送的大小是多少:由两个因素决定:接收窗口和拥塞窗口;rwnd:接收方最多可以接受的字节大小;TCP不使用停等协议,而是一次发送多个报文段,然后等待确认,通过滑动窗口机制,把发送缓冲区中的数据分为4类:已发送且确认的;已发送没有确认的;可以发送的;不能发送的;接收方也有一个接收缓冲区,里面有已经接收的,可以接收的,不能接收的;发送窗口大小就是可以接收的大小。每次发送方收到一个ACK,就把窗口下沿向前滑动,根据接收窗口算出发送窗口,并把上沿向前滑动;如果接收方rwnd=0,则启动一个定时器,超

2022-03-30 16:38:55 4765

原创 C++输出缓冲

输出函数的缓冲区输出到对应设备有三种方式:一:不缓冲,也就是说每次输入一个字符,就立即输出,stderr就是这种;二:行缓冲:输入一行时,刷新缓冲;三:全缓冲:缓冲区满了才输出,一般文件缓冲区用这种;DOS系统,比如Windows的命令行,其默认是不缓冲的,所以cout,printf等输出函数立即输出显示在命令行;Linux系统,默认是行缓冲;C语言中printf和scanf之间规定:scanf如果需要读入数据,而输入缓冲区又没有数据时,则刷新输出缓冲区;C++ 的cin,cout无此规定,但是默

2022-03-30 10:41:36 2398

原创 TCP超时重传次数

TCP是可靠的,发送数据必须要受到对方的ACK,如果没有收到对发送数据的ACK,TCP就会重传;sudo sysctl -a|grep retries查看TCP重传有关的内核参数值:建立连接后的重传:超时重传,或者快速重传,如果收到三个冗余ACK,则表明极有可能数据丢失,则重传,此时拥塞窗口减半,如果没有收到三个冗余ACK,但是超时了,也重传,此时拥塞窗口变为1。但是重传也是有一定次数的,由tcp_retries2决定,Linux下默认是15次,每次重传还会设定一个超时时间,最后重传了15次或者超时了

2022-03-29 21:13:00 5712 1

原创 linux命令统计某个字段出现次数最多的3个字段

参考:https://www.shangmayuan.com/a/6eef3e7de94844bd89a50dc5.html题目要求:有一个CSV文件,求该文件中第二个字段出现次数最多的3个字段;Linux下命令为:sort -t’,’ test.csv -k2,2 |awk ‘{print $2;}’|uniq -c|sort -k1,1nr|head -3sort命令:-t用于指定一行中各个域(字段)之间的分隔符,-k用于指定用于排序的关键字,-k2,2表明用第二个字段进行比较;awk是一种编

2022-03-29 16:09:11 1075

原创 缓存,内存替换策略

缓存中的数据块已满,且都有效,而需要的数据块不在缓存中时,需要调入缓存并替换掉缓存中已有的一个数据块;虚拟存储中,给进程分配的物理页也是有限的,当进程要访问的逻辑地址内存数据不在内存中时,而物理页已被分配满时,也需要替换;有很多替换算法,我只了解这几种:LRU:(least-recently-used):最近最少被使用,根据页面上一次被使用到替换时刻的时间,选取时间最大的那个页面进行替换;LFU:(least-frequently-used):选取一段时间内使用次数最少的那个进行替换;FIFO:先

2022-03-29 09:17:57 356

原创 linux下的make命令与makefile文件的编写

make,makefile

2022-03-28 10:46:06 1430

原创 内存映射和共享内存区别

共享内存用于IPC;内存映射用于文件读写:当多个进程映射到同一个文件时,并且设置了MAP_SHARE,此时可以IPC,不过数据会写回磁盘,所以还是共享内存快。当匿名映射时(不用文件符),由于不知道文件符,所以只可用于父子进程通信(父进程开辟一个MAP_SHARE的匿名映射,然后fork子进程,子进程继承了父进程的映射区,此时效率和共享内存比应该差不多(具体我也不清楚);...

2022-03-27 13:36:19 1054

原创 C++中map,set相关问题

不管是map,unordered_map,multimap,unordered_multimap,还是set相关,其关键字一旦确定,就不能改变,因为其是根据关键字进行存储的,如果改变了关键字,底层存储就得改变,除非用erase删除;也就是说:map<string,int>m;m.begin()->first是个const;auto:用于推断类型;const int a=1;auto p=a;p是int,不是const int;但是如果这样:pair<const stri

2022-03-27 10:29:40 276

原创 虚继承和虚函数

一个空类,没有继承,大小是1(为了区分对象);当一个类虚继承多个基类时,类对象会有一个虚基指针,指向虚基表;当一个类有虚函数时,重写了多个类的虚函数,那么就有多个虚函数指针,指向其所对应的虚函数表。根据虚基表实现多重继承时只有一份继承,虚函数表实现多态。对象的内存布局中还要考虑偏移,寻找具体的地址等。其大小计算比较复杂。通过VS的 cl -d1 reportSingleClassLayoutclassname Source.cpp查看Source.cpp中《classname》这个类的对象的内存布局

2022-03-26 18:01:20 703

空空如也

空空如也

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

TA关注的人

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