自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ STL常用标准库容器入门(vector,map,set,string,list...)

其中几种种序列容器类型C++ STL中最基本以及最常用的类或容器无非就是以下几个:string vector deque list forward_list queue priority_queue stackstring对比在C语言中一般怎么使用字符串的char* s1 = "Hello JackYu!"; //创建指针指向字符串常量,既然是常量字符串,这段字符...

2018-08-09 21:44:08 20282 3

原创 计算机网络 - (三)电脑如何获取到IP的

计算机网络内容目录自动获取IP客户端请求 ip关于租期总结自动获取IP我们的电脑分手动设置IP和自动获取IP,手动设置IP地址当然IP是自己设定的,那么自动获取IP是从哪里得到的IP地址,IP地址又是谁分配的呢。一般没有特殊需求大家基本上是设置的 动态获取IP,因为如果自己静态配置的话,容易出错,例如你不小心配置了一个已经被其他人在使用的 IP 地址。所以我们一般选择的是动态获取IP。注意,这里的 IP地址不仅仅是指主机的唯一标识,还指DNS、网关等IP 地址。客户端请求 ip可能很多人都知.

2020-07-12 11:45:02 1922

原创 计算机网络 - (二)NAT的工作基本原理

计算机网络内容目录开篇回顾NAT的工作基本原理NAT是什么?开篇上一章我们以宽泛的形式介绍了计算机网络的数据传递,知道了一份数据是如何从一台计算机传输到另一台计算机。很粗略,并且忽视了很多重要细节和专有名词。以至于留下了很多谜团,这次我们就穿越层层迷雾继续更加深入探究计算机网络这个庞大的世界。回顾有必要回顾下IP地址分类 和 网段区分 的知识。上一章我们讲了通常由32位构成的的IPv4地址配合子网掩码,从而确定ip的网络部分 和 主机部分的组成。进而确定传输的数据的两台计算机是否同处一个子网中。.

2020-06-04 23:48:36 1330

原创 C++ 接雨水,不看后悔系列,解一道高频面试题

这是一道同事讨论过的一道趣味题,综合了比较多的解题思想,其中有二分,递归,分治等思想。闲来抽空实现了下,如有错误请多多指出,或者有优化处请多多指出。逻辑不是很复杂,直接上代码吧。//// main.cpp// 面试题经典//// Created by 于磊 on 2020/5/27.// Copyright © 2020 于磊. All rights reserved.//#include <iostream>#include <algorithm>#.

2020-05-28 20:17:40 511 1

原创 计算机网络 - (一)计算机之间的网络互通

计算机网络内容目录前言计算机网络 - 计算机之间的网络互通1.物理层2.数据链路层3. 网络层4. 传输层5. 应用层总结前言大物理学家费曼提出一个高效的费曼学习法,即从问题入手,试着把问题都讲出来,以教代学,一旦你能把问题都讲清楚,便学会了。所以我想尝试一下把网络/通信/协议讲清楚,借此让自己学得明白,同时也锻炼自己得表达能力。计算机网络 - 计算机之间的网络互通在这一章我们着重...

2020-04-28 09:58:13 3764

原创 vim常用命令总结

在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下:v 从光标当前位置开始,光标所经过的地方会被...

2020-03-27 19:30:08 172

原创 C++ 异常捕获和处理

C++之异常捕获和处理一、简介  在C++语言中,异常处理包括:throw表达式,try语句块,一套异常类。其中,异常类用于在throw表达式和相关的catch子句之间传递异常的具体信息。exception头文件定义了最普通的异常类exception,它只报告异常的发生,不提供任何额外信息。以下是定义在stdexcept头文件中的常用的异常类:异常类解释exception最常见的问题runtime...

2020-03-27 19:02:39 141

原创 C语言-递归法寻找数组中最小值

int getMin(int array[], int n) { int val1, val2, val3; if (n == 1) return array[0]; if (n % 2 == 0) { val1 = getMin(array, n / 2); val2 = getMin(array + n / 2, n /...

2020-02-25 00:18:54 2436

原创 C语言-谁在说谎

甲:乙说谎 ,乙:丙说谎,丙:甲乙都说谎int main(int argc, const char *argv[]) { int a, b, c; for (a = 0; a <= 1; ++a) { for (b = 0; b <= 1; ++b) { for (c = 0; c <= 1; ++c) { ...

2020-02-24 13:23:22 1674 1

原创 C语言-数字翻译器

输入一个正整数N,输出它的英文表达void translation_C(long b) { long c; if (b <= 19) printf("%s ", data_1[b - 1]); else { c = b / 10; printf("%s ", data_2[c - 2]); c = ...

2020-02-24 13:14:07 5471 3

原创 C语言-数字的全排列

输入一个数字序列{a1,a2,...,an},将该序列进行排列,并输出每一种排列方式。例如:1,3,5.该数列就有6种排列方式。利用递归不难实现#define max 100void Perm(int a[], int n, int s, int r[], int m) { int i, j, k, flag = 0; int b[max]; for (i = 0...

2020-02-24 13:09:29 1764

原创 C语言-移数字游戏

将1~8个数随机的填写到该数阵的外层圆圈中,只剩下中间的一个空圆圈。规定每个数字只能按照数阵中的直线从一个圆圈移动到另一个空的圆圈中。通过若干步的移动,要求将该数阵中的数字移动成为图中所示的状态void Print(int m[]) { printf(" [%d]--[%d]--[%d]\n", m[0], m[1], m[2]); printf(" | ...

2020-02-20 21:37:00 431

原创 C语言-常胜将军

现在有21根火柴,2人轮流取,每人每次可以取走1~4根,不可多取,也不能不取,谁取最后一根火柴谁输。编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为 常胜将军。int main(int argc, const char *argv[]) { int computer, people, spare = 21; printf("-------------------...

2020-02-20 21:28:12 806

原创 C语言-斐波那契数兔子产仔问题

已知一对两个月大的兔子以后每一个月都可以生一对小兔子,而每一对新生的兔子出生两个月后才可以生小兔子(例如:1月份出生,3月份才可以产仔)。一年能繁殖成多少对int Fibonacci(int n, int flag) { if (n == 1 || n == 2) return 1; else return Fibonacci(n - 1...

2020-02-20 21:18:13 794

原创 C语言-寻找水仙花数

“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1^3+5^3+3^3,则153是一个“水仙花数”。求出100~999之间的所有“水仙花数”并输出。int isNarcissus(int digit) { int sum = 0, tmp; tmp = digit; while (tmp > 0) { su...

2020-02-17 17:26:58 968

原创 C语言-爱因斯坦的阶梯问题

爱因斯坦曾经提出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩下1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩下4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。请问该阶梯至少有多少阶 int i = 7; int times = 1000; while ((i % 2 != 1 || i % 3 != 2 || i % 5 ...

2020-02-17 16:50:57 5341

原创 C语言-判断回文数字

有这样一类数字,它们顺着看和倒着看都是相同的数,例如121、656、12321。编写判断从键盘接收的数字是否为回文数字int reverse(int i) { int m, j = 0; m = i; while (m) { j = j * 10 + m % 10; m = m / 10; } return j;}i...

2020-02-16 23:47:12 806

原创 C语言-百钱买百鸡问题

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题。描述如下:鸡翁一,值五钱;鸡母一值钱三;鸡雏三值钱一;百钱买百鸡。则翁、母、雏各几何?利用数学的方法不能抽象成如下方程组:实现:#include <iostream>int accord(int i, int j, int k) { if (5 * i + 3 * j + k / 3 =...

2020-02-16 22:30:50 3861

原创 C语言-三色球问题

有红黄绿三种颜色的球,其中红球3个,黄球3个,绿球6个。现将这12个球混放在一个盒子中,从中任意摸出8个球,编程计算摸出球的各种颜色的搭配代码:#include <iostream>#define RED_BALL_NUM 3#define YELLOW_BALL 3#define GREEN_BALL 6int main(int argc, const cha...

2020-02-16 22:14:38 5646

原创 C语言-十进制/二进制数的互相转化

编写一个程序,将输入的十进制数转化为二进制表示。例如:输入十进制数64,输出二进制数表示1000000void deTobi(int a) { int i = 0, stack[10], r, s; do { r = a / 2; s = a % 2; stack[i] = s; ...

2020-02-16 14:58:57 3280 1

原创 二进制运算-位运算、原码、反码、补码

1. 按位与运算符(&)参加运算的两个数,按二进制位进行“与”运算。运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。例:3 &5即 00000011 & 00000101 = 00000001 ,所以...

2020-02-15 22:36:32 582

原创 JS/ES-实现合并两个有序数列

js 合并两个有序数组let arr1 = [1,3,59,111];let arr2 = [2,4,5,6,7,8,9,11,55,66,77,88];function mergeList(arr1, arr2) { let len1 = arr1.length - 1 let len2 = arr2.length - 1 let mLen = arr1.le...

2020-02-08 22:42:40 226

原创 C++ 数据结构(查找与排序)

冒泡排序 Bubble Sort简明解释通过依次比较、交换相邻的元素大小(按照由小到大的顺序,如果符合这个顺序就不用交换)。1 次这样的循环可以得到一个最大值,n - 1次这样的循环可以排序完毕。属性稳定 时间复杂度O(n²) 交换O(n²) 对即将排序完成的数组进行排序O(n)(但是这种情况下不如插入排序块,请继续看下文)核心概念利用交换,将最大的数冒泡到最后...

2020-02-03 01:17:41 825

原创 C++ define和typedef及复杂声明

一、typedef用途1.定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb;typedef char* PCHAR; // 一般用大写PCHAR pa, pb; 2.用在旧的C的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:struct tagPOINT1...

2020-01-29 00:21:54 743

原创 C++可变参数,“## __VA_ARGS__”宏的介绍和使用

一、可变宏参数在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如:#define pr_debug(fmt,arg...) \ printk(KERN_DEBUG fmt, ##arg)用可变参数宏(variadic macros)传递可变参数表你可能很熟悉在函数中使用可变参数表,如:void printf(const char* format, ...);...

2020-01-23 15:58:39 4092

原创 ES6 JavaScript 不适用临时变量完成变量交换

概要 本文主要描述,如何不使用中间值,将两个变量的值进行交换一、普通做法var a = 1, b = 2, tmp;tmp = a;a = b;b = tmp;二、算术运算var a = 1, b = 2;a = a + b; // a = 3, b = 2b = a - b; // a = 3, b = 1a = a - b; /...

2020-01-13 15:48:14 194

原创 C++11 Lambda表达式和bind

Lambda捕获列表1、空,没有使用任何函数对象参数。2、=,函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。3、&,函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用...

2020-01-13 11:23:00 1067

原创 C++ 中求string和vector容器大小、长度

string:string str("hello world");str.size();str.length();strlen(str.c_str());end(str) - begin(str)固定容器大小的array:sizeof(array)/sizeof(array)[0];end(str) - begin(str);vector:vector是可变大小容...

2020-01-10 15:20:01 17143 1

原创 C++ vector 和 array

#include <array>#include <deque>#include <iostream>#include <list>#include <vector>using namespace std;int main(int argc, const char *argv[]) { list<string&...

2020-01-10 15:03:37 133

原创 C++ const指针常量与常量指针,const成员函数

记忆法:const 在*左边右边记忆法常量指针(被指向的对象是常量)定义:又叫常指针,可以理解为常量的指针,指向的是个常量关键点:常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改; 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值; 指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;const int *...

2020-01-10 15:00:53 306 1

原创 C++ const和static修饰的数据成员

1.通常在类外申明static成员,但是static const的整型(bool,char,int,long)可以在类中声明且初始化,static const的其他类型必须在类外初始化(包括整型数组)。const int ageOn = 100; private: static int interesteRate; static const int inteese = 9...

2020-01-10 14:33:26 323

原创 使用JNI进行Java与C/C++语言混合编程

C++调java编写Java代码并编译这段代码非常简单, 有个静态方法和成员方法, 一个public的成员变量public class Sample2 { public String name; public static String sayHello(String name) { return "Hello, " + name + "!"; ...

2020-01-08 12:32:21 187

原创 Effective C++ 条款14 在资源管理类中小心copying行为

1. 条款13中讲到“资源取得的时机便是初始化时机”并由此引出“以对象管理资源”的概念,资源会在不需要的时刻被销毁。通常情况下使用std中的auto_prt(智能指针)和tr1::shared_ptr(引数智能指针)作为资源管理的对象,这种做法通常都十分有效。但是,auto_ptr和shared_ptr只能管理基于堆(heap-based)的资源,而非heap-base的资源往往不合适。因此有必要...

2018-09-12 13:35:17 149

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

//// main.cpp// 条款13:以对象管理资源//// Created by 于磊 on 2018/7/8.// Copyright © 2018 于磊. All rights reserved.//#include &lt;iostream&gt;class Investment {public: ~Investment(){ st...

2018-09-11 23:28:17 133

原创 Effective C++ 条款12 复制对象时勿忘其每一个部分

1. 编译器合成的拷贝构造函数默认调用基类的拷贝构造函数,合成的拷贝构造操作符也是一样.2. 对于自己编写的拷贝构造函数,编译器不再默认调用基类的拷贝构造函数,仅在拷贝构造函数中没有初始化基类部分时调用默认构造函数.对于自己编写的拷贝赋值操作符,编译器不额外作任何操作(即使类的编写者忘记调用基类的拷贝赋值操作符)!3. 此外,在为类添加新的数据成员时,如果拷贝构造函数和赋值操作符是自己编写...

2018-09-11 21:42:26 109

原创 Effective C++ 条款09 决不在构造和析构过程后调用虚函数

1.C++的继承体系中,最底层的派生类的构造过程中,最先初始化的是基类部分,再按继承层次依次初始化派生类部分,同样的,析构过程则是按相反过程执行。在继承层次A→B→C→D中,构造一个D类对象,其依次经历了A→B→C→D的转变,因此对于以下代码。所以,在这个过程中基类构造过程中,基类尚在构造,派生类对象中也就只存在继承而来的基类部分,调用虚函数这类的调用从不下降至derived class//...

2018-08-24 13:38:31 135

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

1. 某些类的含义决定了它们不具备某些功能,也就是说某些函数不能被创造出来以防被错误的使用(例如定义一个Book类,它含有一个表示ISBN的变量,这种情况下拷贝构造函数以及赋值操作符显然是没有意义的,因为任何两种书的ISBN都不同),但是编译器在类的创建者没有声明默认构造函数,拷贝构造函数,赋值操作符和析构函数的情况下会产生这些函数,为了避免这种情况,可以将这些函数声明为private并且不提供它...

2018-08-23 12:39:18 144

原创 Effective C++ 条款26 尽可能延后变量定义式的出现时间

1. 如果变量定义得过早,那么如果在变量定义后被用到之前出现异常,变量未被用到,但仍然要承担构造和析构成本,此外变量用时再定义也便于查找变量,增加代码可读性.2. 对于循环,除非赋值成本比构造和析构成本低且程序对效率高度敏感,将变量定义放在循环内部可以限制变量作用域,增强程序的可理解性和易维护性.//// main.cpp// 条款26:尽可能延后变量定义式的出现时间////...

2018-07-31 23:33:11 136

原创 Effective C++ 条款24 若所有参数皆需类型转换,请为此采用non-member函数

1. 通常,将只接受拷贝构造函数声明为explict是一个不错的主意,因为这可以避免自动的隐式类型转换所带来的错误,但有些情况下,使类支持隐式类型转换是可行的,例如自定义的数值类型:class Rational { public: Rational(int a = 0, int b = 1) : _numerator(a), _denominator(b),_result(a/b...

2018-07-31 23:31:20 176

原创 Effective C++ 条款10 令operator=返回一个reference to *this 条款11 在operator=中处理"自我赋值"

1. 为了支持形如“a=b=c”的连锁形式,最好令operator=返回一个reference to *this.2. 如果类中含有用于指向堆内存的指针,那么赋值操作符就要注意自我赋值的问题,//// main.cpp// 条款10:令operator=返回一个reference to *this//// Created by 于磊 on 2018/6/24.// Co...

2018-07-31 23:23:18 123

空空如也

空空如也

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

TA关注的人

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