自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ Complex类实现

Complex类是典型的不含指针的类。下面贴出代码:#ifndef __COMPLEX_H_#define __COMPLEX_H_// a += b += c; 结合律 right -> left// cout << a << b; 结合律 left -> right#include <iostream>//编译器会生成默认的拷贝构造,拷贝赋值,和析构函数class Complex {public: Complex

2021-04-03 16:31:24 660

原创 C++典型String类的编写(包含move实现)

C++面向对象是区别于C的典型特征,C++中类有两种不同的类型。数据成员不含指针的;典型代表有Complex类。数据成员含指针的;典型为字符串String类。C++11中提出了新概念move semantics(可译为移动语义),可以简单理解为移动语义为**“浅拷贝”**,具体可查资料了解。下面贴出String类的具体代码:#ifndef __STRING_H_#define __STRING_H_ #include <cstring>#include <iostre

2021-04-03 14:38:43 756

原创 C++虚函数指针vptr与虚函数表vtbl

这里写了一个测试模拟对象内存模型中的虚函数调用机制(业界称动态绑定,Dynamic Binding)。#include <iostream>using namespace std;struct TMP { int a; int b; int c; TMP() { a = 1; b = 1; c = 1; } int operator*() const{ return a + b + c; }};TMP t1, t2, t3;TMP arr[] = {t

2021-03-14 22:43:35 233

原创 C++ pointer-like class

C++2.0之前,有个智能指针叫auto_ptr。->符号作用下去之后,会一直作用下去。sp->已经作用完了,还能px->吗? 可以的,会一直作用下去,这样子这个设计才有意义。代码:template<typename T>class shared_ptr {public: shared_ptr(T* p) : px(p) {} // 智能指针一定是这种写法,重载 * 和 -> T& operator*() const{ return *p

2021-03-13 23:12:43 176

原创 C++显式构造函数和隐式构造函数

函数中参数的叫法:parameter一般认为叫参数;argument一般认为叫实参;参数个数和实参个数是不一样的。//对于A这么个类,有个构造函数A(int a, int b, int c = 1) : a(m), b(n) {}这里认为parameter参数需要3个,argument实参2个,3个肯定没问题(但是只要两个实参就够了)。explicit关键字一般用在类的构造函数中,表示显式创建对象,编译器不能隐式转换构造。见代码:#include <iostream>

2021-03-13 20:06:10 2080

原创 C++转换函数Conversion function

C++中的转换函数能将一个 “类型” 转化为你想要的 “类型”,不管是built-in 类型还是 user-defined 类型。方法为operator typename() {}见代码:#include <iostream>using namespace std;class Fraction {public: Fraction(int num, int den = 1) : m_numerator(num), m_denominator(den) {} opera

2021-03-13 19:28:11 225

原创 C++继承和组合情况下构造和析构顺序

第一种情况这里主要是考虑,Base part和Component part哪个先构造的问题。上代码:#include <iostream>using namespace std;class Component {public: Component(int c = 0) : _C_c(c) { cout << "调用Component的构造函数" << endl; } ~Component() { cout << "调用Comp

2021-03-13 17:55:56 159

原创 word写论文事项

公式居中,编号右对齐,引用编号参考:https://www.cnblogs.com/salan668/p/3686126.htmlhttps://jingyan.baidu.com/article/4dc408486da1e1c8d946f133.html

2021-02-28 20:18:05 95

原创 机器学习和深度学习的比较综述

TODO

2021-02-26 20:06:05 188

原创 tensorflow与cuda和cudnn版本关系

一定要严格按照版本对应关系下载驱动,不然各种问题。最近,跑一个深度学习模型,用的tensorflow-gpu 1.15.0,结果下载的驱动为10.2版本的,裂开来。

2021-02-25 11:21:39 263

原创 Cisco Encrypted Traffic Analysis(ETA)

These two articles say that “fancy” classification features like packet interarrival times are coming to commercial firewalls. Cisco calls it Encrypted Traffic Analysis (ETA). It is based on some published research and a free software prototype.https://ww

2021-02-21 20:25:49 549

原创 json格式的理解

TODO

2021-02-21 18:13:03 115

原创 python一些常见

os.path.splitext() 将文件名和扩展名分开os.path.split() 返回文件的路径和文件名os.path.join() 合并文件名和路径string.split() 按某种分隔符分割字符串

2021-02-21 11:26:25 129

原创 Wireshark常见问题汇总

TCP payload 和 TCP segment dataTCP payload是这个报文tcp负载的长度。TCP segment data是数据部分的长度。就比如这里,server hello的record layer占了58bytes,实际上后面的那部分数据是certificate的。借用 ask.wireshark.org 论坛上的一个回答:As you probably know TCP is a stream transport, which means it is intend

2021-02-20 20:58:08 1954 1

原创 一些常用的工具

pip install慢因为镜象在国外,用清华镜像源就行了。pip install -i https://pypi.tuna.tsinghua.edu.cn/simple +packagegit clone慢macOS:git clone特别慢是因为github.global.ssl.fastly.net域名被限制了。只要找到这个域名对应的ip地址,然后在hosts文件中加上ip–>域名的映射,刷新DNS缓存便可nslookup github.global.ssl.fastly.n

2021-02-20 12:04:02 132

原创 Linux一些基本命令

ifconfig显示或设置网络设备。echo显示提示信息,一般用在shell脚本中。findfind 命令用来在指定目录下查找文件。

2021-02-19 20:21:51 92

原创 数字子序列和模m最大值问题

问题描述:给定一个非负数组arr,和一个正数m。返回arr的所有子序列中累加和 %m 之后的最大值。如果arr中每个数字不大,怎么做?如果arr中 m 的值很小,怎么做?如果arr的长度很短,但是arr每个数字比较大并且m比较大呢?1. 暴力解法( O(N^2) )所有子序列的和模上m的值全部求出来,求出最大的即可。code:/** 生成每个子序列和的递归函数 * @param arr: 原始数组名* @param n: 原始数组长度* @param aux_ar

2021-02-19 11:13:05 552 2

原创 根据后序遍历数组生成一棵搜索二叉树

具体思想画个图就行:code1:找分界处位置用顺序查找// 节点的类型 struct TreeNode { TreeNode* left; TreeNode* right; int val; TreeNode(int value) : val(value), \ left(NULL), right(NULL) {}};// declarationTreeNode* process(int*, int, int);/** postArrToBST* @pa

2021-02-17 15:42:41 307

原创 纸条折痕(对折N次)打印问题

问题描述:把一段纸条竖放在桌子上,然后从纸条的下边向上方对折一次,压出折痕后展开。此时折痕是凹下去的。如果从纸条的下边向上方连续对折两次,压出折痕后展开,此时有三条折痕,从上到下依次是凹、凹、凸。给定一个参数N,代表纸条从下到上连续对折N次。请从上到下打印所有折痕的方向。eg:N = 1,打印down; N = 2,打印down、down、up。这个问题动手试验就能发现规律。code:#include <iostream> // declarationvoid pr.

2021-02-17 12:08:32 753

原创 算法时间复杂度之master公式

master公式是相对于递归算法而言:递推公式为:T(N) = a * T(N / b) + O(Nd)有下面的结论:如果记不住,手推一下就行。

2021-02-17 11:04:10 339

原创 构造数组arr,满足:对于任意 i < k < j ,arr[i] + arr[j] != 2 * arr[k]

题目描述:构造长度为N的数组arr,此数组需要满足: 对于任意 i < k < j ,arr[i] + arr[j] != 2 * arr[k] 。这里有个前提:对原数组做奇变换和偶变换,也达标,可以证明的。见下面:其实加1、加2、减100等等这种变换也能够达标,那为啥要奇偶变换呢?因为好做啊,想象我们要扩大数组,如果我们前面拿一个达标的奇数数组,后面拿一个达标的偶数数组, (一个odd + 一个even 一定不会等于 2 * 一个num )的。所以,拼接起来的大数组一定是.

2021-02-17 10:52:52 458

原创 随机函数等概率返回问题

问题描述:给定一个随机函数f,等概率返回1~5中的一个数字,这是唯一可以是使用的随机机制,如何实现等概率返回1~7中的一个数字。给定一个随机函数f,等概率返回a~b中的一个字母,这是唯一可以是使用的随机机制,如何实现等概率返回a~d中的一个数字。对于此类问题:二进制调整去拼。给出一般的解法:代码:#include <iostream> // std::cout #include <stdlib.h> // rand() srand() RAND_M.

2021-02-16 16:27:41 516

原创 直方图装水的格数最大问题

问题描述:给定一个正整数数组arr,把arr想象成一个直方图。 返回这个直方图如果装水,最多能装下几格水?/** 题目描述:给定一个正整数数组arr,把arr想象成一个直方图。 * 返回这个直方图如果装水,能装下几格水? */#include <iostream>#include <algorithm>namespace cc_01_histogramWater{/** 直方图装水解法1:每次遍历到一个位置,求出左边最大与右边最大。 *.

2021-02-16 12:54:20 227

原创 十大排序算法的比较与分析

十大排序算法已经全部总结在博客里。基于比较的排序冒泡排序选择排序插入排序希尔排序归并排序快速排序堆排序非基于比较的排序桶排序、基数排序与计数排序关于十大排序算法的比较,无非就是算法原理、算法时空复杂度、算法稳定性这些内容,具体的已经全部写在博客里,见上面的超链接。最后,所有的算法和测试代码:** Author: Ray** Email: xuanlei@seu.edu.cn** Date: 2021.02.12** Description: 1. 各个排序算法

2021-02-12 22:03:06 274

原创 排序算法之桶排序、基数排序和计数排序及C++实现

计数排序计数排序(Counting Sort)思想(摘自百度百科):对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数(此处并非比较各元素的大小,而是通过对元素值的计数和计数值的累加来确定)。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小于x的值,则x可以直接存放在输出序列的第18个位置上。当然,如果有多个元素具有相同的值时,我们不能将这些元素放在输出序列的同一个位置上,因此,上述方案还要作适当的修改。计数排序是非基于比

2021-02-12 01:55:56 433

原创 排序算法之堆排序及C++实现

堆排序(heap sort)思想:借助于堆这个数据结构进行排序。堆排序属于比较排序,不稳定。声明 :堆的操作,包括插入,拔掉堆顶,上浮,下滤等等过程,自己画图辅助理解。下面贴出百度百科对堆的定义:堆满足两个性质:结构性质是一棵完全二叉树。堆序性质对于树中每个节点(如果它有父亲),那么它的值总是 <= 父亲节点的值(这叫大根堆),总是 >= 父亲节点的值(叫小根堆)。每次对堆进行的插入,删除操作都必须进行调整保持堆的堆序性质。堆逻辑上是一棵完全二叉树,但实际上是一个数组表

2021-02-11 10:58:56 1169

原创 zuoshen算法视频

链接:https://pan.baidu.com/s/1A6MSs3hxfCPHTUpaAFFBMA提取码:0426左神算法视频:欢迎各位看看我的文章呐,如果觉得有用可以关注博主一手。谢谢~~~

2021-02-09 22:55:55 212

原创 侯捷C++视频(百度云盘)

链接:https://pan.baidu.com/s/1gO7b5j1cJs29jvqf_cio3g提取码:0426包括:欢迎各位看看我的文章呐,如果觉得有用可以关注博主一波。谢谢~~~

2021-02-09 22:47:00 12173 29

原创 排序算法之归并排序及C++实现

归并排序思想:将原数组拆成前后两半,对前半部分和后半部分分别执行排序过程,再将排好序的前后两部分合并。典型的分治问题,而分治一般用递归去解。归并排序也是基于比较的排序。代码:template<typename T>void merge(T* arr, int l, int m, int r, T* aux_arr) { // merge函数:合并两个有序数组 int k = m + 1; int tmp = l; int numElements = r - l

2021-02-08 23:54:29 298

原创 排序算法之希尔排序及C++实现

希尔排序:Donald Shell发明,冲破二次时间屏障的第一批排序算法之一。但是,若干年之后才被证明。希尔排序思想:跟插入排序思想一样,只不过是比较相距一定间隔的元素,间隔距离慢慢减小,直到最后一趟间隔为1(间隔为1就是插入排序)。所以,希尔排序又叫缩减增加排序(diminishing increment sort)。希尔排序不稳定,也是比较类排序。希尔排序使用一个序列 h1,h2, …, ht,叫做增量序列。增量序列很多,只需要 h1 为1即可(为1,不就是插入排序,所以插入排序就是增量序列只有

2021-02-08 15:29:37 369

原创 排序算法之插入排序及C++实现

插入排序思想:假设[0, i - 1]位置有序,将 i 位置元素插入到前面有序数组中适当的位置。一直到最后一趟,[0, n - 2]位置有序,将 n -1 位置元素插入进去即可。插入排序:我们拆词,”插入“,如何理解”插入“这个词?理解了就简单了。插入排序属于比较类的排序。插入排序是稳定的。最简单的demo:template<typename T>inline void swap(T* arr, size_t lhs, size_t rhs) { // size_t是unsign

2021-02-08 13:18:46 183 1

原创 排序算法之选择排序及C++实现

选择排序思想:从[0, n-1]选个最小的和0位置元素交换,然后从[1, n-1]选个最小的和1位置元素交换,…,最后从[n-2, n-1]选个最小的和n-2位置元素交换。共 n-1 趟。属于比较排序类别。选择排序不稳定,(稳定性其实可以这样来理解:像冒泡排序没有跨元素交换,稳定;而选择排序跨元素交换,不稳定)。selectsort代码:template<typename T>inline void swap(T* arr, size_t lhs, size_t rhs) { /

2021-02-08 11:20:49 229

原创 排序算法之冒泡排序及C++实现

冒泡排序思想:比较交换,行为类似于大的往下沉,小的往上冒,故名冒泡排序(Bubble Sort)。属于交换类排序。属于稳定排序(稳定,stable:即如果a==b,在原序列中a在b前面,排序完后a依旧在b前面)。这里有一点要注意,如果一个排序是稳定的,我们肯定能把它实现成不稳定的(改一下< or <=),但是,探讨稳定性我们一般公认的是它能不能被实现成稳定的。先声明:所有的排序我都会总结记录在博客里,最后会有一个大的cpp文件包含全部排序的代码,每个排序算法放在单独的一个namespace

2021-02-08 01:17:09 250

原创 Effective C++ 条款30 透彻了解内联的里里外外

内联:将此函数的每一个调用都用该函数本体替换之过度内联,会使目标码过大;内联一般内联小型、被频繁调用的函数,比如swap函数。template<typename T>inline const T& std::max(const T& a, const T& b) { return a < b ? b : a;}内联函数通常一定被置于头文件内,因为大多数建制环境(build environments)在编译过程中进行inlining,为了将一个函数调用

2021-02-07 11:59:58 146

原创 Effective C++ 条款28 避免返回handles指向对象内部成分

所谓的handle:pointer、reference、迭代器统统都是,用来取得某个对象的东西。考虑下面代码:class Point { // 表示“点”的类public: Point(int x, int y); ... void setX(int newx); void setY(int newy); ...};struct RectData { //左上角的点和右下角的点用来表示一个矩阵 Point ulhc; //ulhc=“upper left-hand corn

2021-02-06 23:11:02 184

原创 Effective C++ 条款13 以对象管理资源

资源管理(Resource Management)是很重要的一个内容,这也是C/C++区别其他强类型高级语言的重要的一点。C++程序中最常使用的资源就是动态分配内存(分配内存不归还会导致内存泄漏),其他常见的资源还包括文件描述器(file descriptors)、互斥锁(mutex locks)、数据库连接、网络sockets以及图形界面中的字型和笔刷。有借有还,再借不难。有这样的意识还不够,异常、函数内多重回传路径、程序维护员改动软件但未充分理解等等其他的原因导致资源管理得好并不太容易。so,资源

2021-02-04 23:48:28 110

原创 Effective C++ 条款06 若不想使用编译器自动生成的函数就明确拒绝

如果不声明copy ctor和copy assignment,编译器会自动声明,并且都是public的。如何阻止copying呢?1. 将成员函数声明为private而且故意不去实现它c++标准库的iostream程序中就是这样做的。ios_base, basic_ios和sentry类无一例外。我查看了安装Dev c++时候安装的编译器gnu c++的源代码,如下:这样,如果拷贝该类对象,编译器会阻止;如果不慎在member函数或friend函数调用,链接器会抱怨。另外,我们知道,把连接期错误移

2021-02-04 20:58:39 144

原创 《鸟哥的Linux私房菜》第2章“主机规划与磁盘分区”笔记

1

2021-01-26 11:06:36 176

原创 《鸟哥的Linux私房菜》第1章“Linux是什么与如何学习”笔记

有空来补这一章

2021-01-25 08:52:18 106

原创 《鸟哥的Linux私房菜》第0章”计算机概论“读书笔记

这一章主要介绍了计算机底层硬件的一些基础知识,有时间再补

2021-01-25 08:49:30 92

空空如也

空空如也

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

TA关注的人

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