- 博客(90)
- 收藏
- 关注
原创 [C++]迭代器失效
迭代器失效先看一段代码#include <iostream>#include <vector>#include <set>int main() { int cnt = 0; std::set<int> s{1,4}; std::vector<int> vec{0,1,2,3,4,5,6,7,8,9}; f...
2022-05-11 20:37:52
1637
原创 [c/c++]trivial/POD类型和standard layout
什么是trivial/POD类型?C++20标准之前,POD类型指符合C的平凡旧数据结构(Plain Old Data),即类似C中结构体的平凡的、不具备特殊操作的数据结构,可以用于元数据交换的数据类型,直接以二进制和C库兼容的数据类型。设立此概念的初衷是为了描述那些 和 C 中结构体的概念相似的类型。但是,这个概念是太过于抽象和难以精确、严禁描述的。通过标准中对 POD 定义的变动,甚至在...
2021-08-17 00:58:58
1939
原创 如何让代码看起来有万佛朝宗的气势
1.使用全限定作用域::std::string user_name;::std::find('daniu',user_name.begin(), user_name.end());使用全限定作用域有如下功效:1.后来者被限定符吓到,料想代码写的如此严谨,这哥们必是大神2.超长的作用域给人一种系统很复杂的感觉...
2021-08-16 23:48:11
1555
原创 c/c++静态库和动态库制作
1.什么是库库lib是编译好的二进制代码,可以被操作系统载入内存执行,一般是预先编译好的函数的集合,可以通过头文件链接到库文件,执行已经编译好的代码段。库一般分为静态库(static lib,在linux系统一般是.a文件)和动态库(dynamic lib,也叫共享库,在linux系统一般是.so文件)。二者的不同点在于被载入的时间不同:静态库.a在编译的过程中会被编译到可执行文件,也就是...
2020-08-22 03:06:26
374
原创 静态库和动态库
1.什么是库库lib是编译好的二进制代码,可以被操作系统载入内存执行,一般是预先编译好的函数的集合,可以通过头文件链接到库文件,执行已经编译好的代码段。库一般分为静态库(static lib,在linux系统一般是.a文件)和动态库(dynamic lib,也叫共享库,在linux系统一般是.so文件)。二者的不同点在于被载入的时间不同:静态库.a在编译的过程中会被编译到可执行文件,也就是说会增大可执行文件的体积。动态库则是在执行的过程中才会去读取.so文件,不用编译进可执行程序,因此可执行程序体
2020-08-03 01:55:57
564
原创 终端复用神器Tmux使用教程
文章目录1.什么是Tmux2.使用tmux2.1安装Tmux2.2 启动、进入、分离与退出Session`启动tmux``分离session``回到session``退出Session``重命名Session`2.3Tmux窗口扩展和切换`垂直划分``水平划分``在窗口间移动光标`交换窗格位置。3.常用操作3.1经典场景3.2经典快捷键4.其它1.什么是TmuxTmux是一个终端复用软件 T...
2020-04-02 04:30:41
2224
原创 DataWhale二手车价格预测Task4-建模调参
文章目录DataWhale二手车价格预测Task4-建模调参四、建模与调参4.1 学习目标4.2 内容介绍4.3 相关原理介绍与推荐4.3.1 线性回归模型4.3.2 决策树模型4.3.3 GBDT模型4.3.4 XGBoost模型4.3.5 LightGBM模型4.3.6 推荐教材:4.4 代码示例4.4.1 读取数据4.4.2 线性回归 & 五折交叉验证 & 模拟真实业务情况4...
2020-03-31 19:23:34
352
原创 CentOS8安装Docker出现package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3
文章目录1.背景简介2.错误提示3.问题分析4.解决方法1.背景简介最近用上了VULTR机器,默认使用了CentOS8,正好尝尝鲜,尝试安装Docker时出现了错误,故及时记录一下,方面其他同学。2.错误提示 Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but...
2020-03-30 01:25:24
15196
12
原创 vs2017 配置OpenCV4.2开发环境(Win10环境)
最换了块硬盘,OpenCV得重装下,很久没用Win了,正好记录下给大家留个参考1.安装Visual Studio2017/2019目前最新的Visual Studio版本是Visual Studio 2019,读者按喜好安装即可,我的电脑上已经安装好了VS2017,就不安装新版本了2.配置OpenCV2.1 下载OpenCV登录OpenCV官网下载OpenCV...
2020-03-29 21:33:50
926
原创 win10 + vs2017/2019 + OpenCV4.2配置OpenCV开发环境
文章目录1.安装Visual Studio2017/20192.配置OpenCV2.1 下载OpenCV2.2 安装OpenCV3.VisualStudio配置OpenCV3.1添加环境变量3.2配置项目目录3.3 配置inlcude目录3.4 配置静态库4.测试OpenCV1.安装Visual Studio2017/2019目前最新的Visual Studio版本是Visual Studio...
2020-03-29 21:26:51
1033
原创 DataWhale二手车价格预测Task3-特征工程
Task3 二手车价格预测Task3-特征工程1.常见的特征工程包括:异常处理:通过箱线图(或 3-Sigma)分析删除异常值;BOX-COX 转换(处理有偏分布);长尾截断;特征归一化/标准化:标准化(转换为标准正态分布);归一化(抓换到 [0,1] 区间);针对幂律分布,可以采用公式: log(1+x1+median)log(1+x1+median)数据分桶:等...
2020-03-27 19:19:14
173
原创 DataWhale二手车价格预测Task2-数据探索性分析EDA
二手车数据探索性分析EDATip:此部分为零基础入门数据挖掘的 Task1 赛题理解 部分,为大家入门数据挖掘比赛提供一个基本的赛题入门讲解,欢迎后续大家多多交流。赛题:零基础入门数据挖掘 - 二手车交易价格预测地址:https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.10...
2020-03-24 21:48:29
781
转载 DataWhale二手车价格预测Task1-数据理解
Datawhale 零基础入门数据挖掘-Task1 赛题理解内容来自DataWhale零基础数据挖掘竞赛 Task1比较简单,简单熟悉下官方教程一、 赛题理解Tip:此部分为零基础入门数据挖掘的 Task1 赛题理解 部分,为大家入门数据挖掘比赛提供一个基本的赛题入门讲解,欢迎后续大家多多交流。赛题:零基础入门数据挖掘 - 二手车交易价格预测地址:https://tianchi.al...
2020-03-24 19:13:10
541
原创 [c/c++]1.堆、栈内存储存空间布局
历史沿袭至今,C程序一直由下列几部分组成:内存布局代码段:程序的所有指令会存放在这个区域,这是已经编译后的机器码。这是由CPU执行的机器指令部分。通常,正文段是可共 享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell 等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防 止程序由于意外而修改其指令。字面量池是程序初始化时的一些字符串字面量,在程序中用于显...
2020-03-20 21:15:39
370
原创 APUE第13章 守护进程Deameon
守护进程守护进程daemon是一种生存周期很长的进程。它们通常在系统引导时启动,在系统关闭时终止。守护进程是没有终端的,它们一直在后台运行。守护进程的特征在Linux系统中,可以通过命令 ps -efj 来查看守护进程。例如下图:image.png从上图中可以看到 TTY 一列,该列显示每个进程的终端,对于问号(?)显示的进程,表明该进程没有控制终端。而CM...
2020-02-23 19:16:54
190
原创 APUE第12章 线程属性设置
线程属性12.3 线程属性pthread 接口允许我们通过设置每个对象关联的不同属性来细调线 程和同步对象的行为。通常,管理这些属性的函数都遵循相同的模式。(1)每个对象与它自己类型的属性对象进行关联(线程与线程属性关联,互斥量与互斥量属性关联,等等)。一个属性对象可以代表多 个属性。属性对象对应用程序来说是不透明的。这意味着应用程序并不 需要了解有关属性对象内部结构的详细...
2020-02-23 19:08:25
198
原创 APUE第11章 线程
10.1 引言pthread在前面的章节中讨论了进程,学习了UNIX进程的环境、进程间的 关系以及控制进程的不同方式。可以看到在相关的进程间可以存在一定 的共享。本章将进一步深入理解进程,了解如何使用多个控制线程(或者简 单地说就是线程)在单进程环境中执行多个任务。一个进程中的所有线 程都可以访问该进程的组成部件,如文件描述符和内存。不管在什么情况下,只要单个资...
2020-02-23 17:37:32
193
原创 APUE第10章 信号
第10章 信号signal10.1 引言信号是软件中断。很多比较重要的应用程序都需处理信号。信号提 供了一种处理异步事件的方法,例如,终端用户键入中断键,会通过信 号机制停止一个程序,或及早终止管道中的下一个程序。UNIX系统的早期版本就已经提供信号机制,但是这些系统(如 V7)所提供的信号模型并不可靠。信号可能丢失,而且在执行临界区代 码时,进程很难关闭所选择...
2020-02-21 11:23:59
298
原创 [c/c++] 7.signal函数
函数signalUNIX系统信号机制最简单的接口是signal函数。#include <signal.h> void (*signal(int signo, void (*func)(int)))(int);返回值:若成功,返回以前的信号处理配置;若出错,返回SIG_ERRsignal函数由ISO C定义。因为ISO C不涉及多进程、进程组以及终 端I...
2020-02-21 01:19:53
317
原创 APUE第9章 进程关系、进程组、会话
9 进程关系image.pngimage.png在第8章学习了进程的控制原语,通过各种进程原语可以对进程进行控制,包括新建进程、执行新程序、终止进程等。在使用fork( )产生新进程后,就出现了进程父子进程的概念,这是进程间的关系。本章更加详细地说明进程间的关系,包括:进程组、会话、作业等。9.1 终端登录当我们通过硬件终端而非网络终端登录到系统时...
2020-02-20 01:37:46
177
原创 APUE第8章 进程控制
8.1 引言在理解线程之前,首先需要了解UNIX/Linux进程。 进程是由操作系统创建的,需要相当数量的“开销”。 进程包含有关程序资源和程序执行状态的信息,包括:它是一个在随机访问内存(RAM)中,正在执行的程序,它是资源分配的最小单位。image.pngpcb内容:1)进程ID,进程组ID,用户ID和组ID2)环境3)工作目录4)程序说明5)寄存器...
2020-02-20 01:17:56
273
原创 [c/c++]6. exec函数
execimage.png曾提及用fork函数创建新的子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用磁盘 上的一个新程序替换了当前进程的正文段、数据段、堆段和栈段。有7种不同的e...
2020-02-20 00:38:08
3304
原创 [c/c++]5.wait、waitpid、waitid,wait3、4 exit和,孤儿、僵尸进程
1.函数exitimage.png进程有5种正常终止及3种异常终止方式。5种正常终 止方式具体如下。(1)在main函数内执行return语句。如在7.3节中所述,这等效于调 用exit。(2)调用exit函数。此函数由ISO C定义,其操作包括调用各终止 处理程序(终止处理程序在调用atexit函数时登记),然后关闭所有标准 I/O流等。因为ISO C并不处...
2020-02-20 00:04:55
2119
1
原创 [c/c++]4.fork、vfork、clone和写时拷贝(copy on write)技术
进程创建进程创建首先说明Linux下的进程与线程比较相近。这么说的一个原因是它们都需要相同的数据结构来表示,即task_struct。区别在于一个有独立的用户空间,一个是共享的用户空间(如果完全没有用户空间则是内核线程,不需要)。Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过exec这样的API来切换到实际想要运...
2020-02-16 07:59:01
561
原创 APUE第7章 进程环境
7.1引言image.png将介绍进程控制原语,在此之前需先了解进程的环境。本章 中将学习:当程序执行时,其main函数是如何被调用的;命令行参数是 如何传递给新程序的;典型的存储空间布局是什么样式;如何分配另外 的存储空间;进程如何使用环境变量;进程的各种不同终止方式等。另 外,还将说明longjmp和setjmp函数以及它们与栈的交互作用。本章结束 之前,还将查...
2020-02-15 23:36:55
157
原创 [c/c++]3.如何查看和更改程序运行栈的大小
进程内存布局image.png我们写程序运行栈的栈帧保存在栈区,函数调用深度太多将导致爆栈栈的大小有上限,每个进程可以指定软上限,操作系统可指定硬上限linux查看栈上限方法linux可以通过ulimit命令查看栈上限和设置上限ulimit -a 查看进程所有资源上限ulimit -s xx 修改栈上限也可以通过程序中调用函数修改每个进程都有一...
2020-02-15 23:36:15
4092
原创 [c/c++]2.malloc、calloc、realloc
储存空间动态分配image.pngISO C说明了3个用于存储空间动态分配的函数。(1)malloc,分配指定字节数的存储区。此存储区中的初始值不确 定。(2)calloc,为指定数量指定长度的对象分配存储空间。该空间中 的每一位(bit)都初始化为0。(3)realloc,增加或减少以前分配区的长度。当增加长度时,可能 需将以前分配区的内容移到另一个足够大...
2020-02-15 10:26:05
273
原创 [c/c++]1.内存储存空间布局
历史沿袭至今,C程序一直由下列几部分组成:内存布局image.png代码段:程序的所有指令会存放在这个区域,这是已经编译后的机器码。这是由CPU执行的机器指令部分。通常,正文段是可共 享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell 等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防 止程序由于意外而修改其指令。字面量池是程...
2020-02-15 09:36:12
169
原创 yaml-cpp:c++ 开发中利用yaml-cpp读写yaml配置文件
在程序员的开发生涯中,读写配置文件必不可少。配置文件有利于我们灵活配置工程,解决大量重复劳动,也方便调试。配置文件的格式有很多,最简单的有一行一行的文本,也有像 json、xml、protocol buffer 这样结构化的格式,当然也有 yaml 这种格式。今天的博文介绍的是如何在 C++ 开发中利用 yaml-cpp 开源库读写 yaml 配置文件。如果有 Python...
2020-02-13 00:36:57
1460
原创 Makefile简单入门
最近工作编译程序一直在用别人写的Makefile,但是没有系统的学习过,趁着放假学一波makefile0x00 Makefile 概述一个企业级项目,通常会有很多源文件,有时也会按功能、类型、模块分门别类的放在不同的目录中,有时候也会在一个目录里存放了多个程序的源代码。这时,如何对这些代码的编译就成了个问题。Makefile 就是为这个问题而生的,它定义了一套...
2020-02-10 04:17:55
176
原创 gcc参数详解
gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:1、预处理,生成 .i 的文件[预处理器cpp]2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]4、连接目标代码, 生成可执行程序 [链接器ld]过程如下:...
2020-02-10 03:19:32
403
原创 linux系统信息读取小程序
获取内核版本、架构、用户名、终端、目录image.png/* * @Author: machineplay * @Date: 2020-02-05 03:04:30 * @Description: only for fun */#include <iostream>#include <stdio.h>#include <...
2020-02-05 05:42:50
123
原创 本地项目在github和coding上同步
用过一段时间的github,一直挺顺畅,突然用上了coding,略不适应,因此把coding和github上的远程仓库统一同步.image.png之前设置过SSH key,其值放在目录/.ssh/id_rsa.pub中,注意不是id_rsa,把id_rsa.pub文件中的ssh值放入此时已经在github和coding中已经设置好了SSH,用git remote...
2020-02-05 00:07:30
263
原创 计算可由time_t数据类型表示的最近时间。如果超出了这一时间将会如何?
计算可由time_t数据类型表示的最近时间。如果超出了这一时间将会如何?C++11标准规定long类型最少占32位,在我的计算机上,系统使用long int来实现time_t,实际使用64位来表示long类型,因此其取值值范围为 -9223372036854775808~9223372036854775807,由于该值特别大,2900亿年后才会溢出,此时宇宙可能都不存在了。对于某...
2020-02-04 22:45:42
589
原创 如果系统使用阴影文件,那么如何取得加密口令?
如果系统使用阴影文件,那么如何取得加密口令?无法获取,因为shadow文件只允许root用户访问,普通用户无法取得。假设你有超级用户权限,并且系统使用了阴影口令,重新考虑上一道习题。#include <iostream>#include <shadow.h>int main (int argc, char *argv[]){ string ...
2020-02-04 22:34:37
248
原创 APUE第6章 系统数据文件和信息
6.1 引言UNIX系统的正常运作需要使用大量与系统有关的数据文件,例 如,口令文件/etc/passwd和组文件/etc/group就是经常被多个程序频繁 使用的两个文件。用户每次登录UNIX系统,以及每次执行ls -l命令时都 要使用口令文件。由于历史原因,这些数据文件都是ASCII文本文件,并且使用标准 I/O库读这些文件。但是,对于较大的系统,顺序扫描口令文件很花费 时...
2020-02-04 22:30:32
278
原创 c时间函数strftime、struct timespec 和 struct timeval
时间和日期由UNIX内核提供的基本时间服务是计算自协调世界时(Coordinated Universal Time,UTC)公元1970年1月1日00:00:00这一特定 时间以来经过的秒数。1.10节中曾提及这种秒数是以数据类型time_t表示 的,我们称它们为日历时间。日历时间包括时间和日期。UNIX在这方 面与其他操作系统的区别是:(a)以协调统一时间而非本地时间计 时;(...
2020-02-04 22:19:55
1468
原创 Linux读取系统信息
系统标识POSIX.1定义了uname函数,它返回与主机和操作系统有关的信息。#include <sys/utsname.h>int uname(struct utsname *name);返回值:若成功,返回非负值;若出错,返回-1 通过该函数的参数向其传递一个 utsname 结构的地址,然后该函数填写此结构。POSIX.1只定义了该结构中最少需提供的字...
2020-02-03 04:05:24
215
原创 内存流
我们已经看到,标准I/O库把数据缓存在内存中,因此每次一字符 和每次一行的I/O更有效。我们也可以通过调用setbuf或setvbuf函数让 I/O库使用我们自己的缓冲区。在SUSv4中支持了内存流。这就是标准 I/O流,虽然仍使用FILE指针进行访问,但其实并没有底层文件。所有 的I/O都是通过在缓冲区与主存之间来回传送字节来完成的。我们将看 到,即便这些流看起来像文件流,它们的...
2020-01-30 15:56:11
408
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人