自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 资源 (3)
  • 收藏
  • 关注

原创 Mac vscode配置c/c++环境

include会根据选择的编译器不同而选择不同的路径Mac vscode配置c/c++环境Mac中C++的include路径c_cpp_properties.json{ "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFolder}/**", "/Applications/Xco.

2020-12-12 23:51:04 405

原创 GDB简单入门

gdb是GNU开源组织发布的, 在UNIX/Linux系统下基于命令行的, 功能强大的调试工具进行gdb调试时, 在编译程序时需要增加-g选项, 将调试信息添加到可执行文件中启动gdb调试的两种方法gdb进入gdb环境, 然后输入file 可执行文件gdb 可执文件quit : 退出调试环境 (q)run : 运行可执行文件 ®break : 设置断点 (b)break 函数名break 源文件:行号continue : 继续执行程序到下一个断点 ©next : 单步.

2020-11-09 00:13:36 196 1

原创 variadic templates

可变参数模版, 使得函数可以接收任意类型, 任意数量的参数一定需要一个无参函数结束递归, 并且要放在前面, 编译器是从前往后依次找寻第一个可以调用的函数.每次传递的参数被分为一个和一包, 一包继续递归传递下去使用sizeof…(args) 获得一包里参数的个数void print() {}template<typename T, typename... Types>void print(const T& arg, const Types&... args) .

2020-11-08 14:30:21 196

原创 specialization

文章目录full specializationpartial specialization个数范围full specialization泛化 : 编写的类或者函数不指定类型, 使用时再临时指定, 使得编写的一份代码可以适用于各种情况特化 : 在泛化的基础上, 增加一些特殊的地方. 比如针对某些特殊的类型, 专门进行一份代码编写.泛化版本 和 特化版本 是要同时存在的当遇到hash<long>() 编译器发现泛化版本可以, 特化版本也有对应的, 当然会选择特化版本.parti

2020-11-08 13:58:52 331

原创 member template

文章目录member template 常被用于拷贝构造函数中一般情况都是用 一个类的对象A 去拷贝构造 该类的对象B但是由于up-cast的存在, 子类对象是可以转换为父类对象的因此也需要一个类的子类A的对象 (子类B的对象...)去拷贝构造 该类的对象也就需要member template的存在...

2020-11-08 13:28:47 225

原创 function-like classes (ing)

文章目录让一个类的使用像一个函数, ()是function call operator, 只要一个类可以调用(), 就说它像一个函数. 也就是仿函数重载operator()操作符

2020-11-08 13:03:19 75

原创 pointer-like classes

文章目录关于智能指针关于迭代器将一个类设计成像一个指针, 可以给传统的指针增加一些额外的功能.指针支持的操作符, 这个类应该都支持关于智能指针箭头符号作用在左值后, 仍然会作用在新的返回值上*sp => *my_ptr<Foo>::pxsp-> => my_ptr<Foo>::px->template<class T>class my_ptr {public: my_ptr(T* p) : px(p) {} T&amp

2020-11-07 20:06:07 77

原创 conversion function

文章目录conversion function (自定义类型转换为其余类型)non-explicit-one-argument constructor (基本类型转换为自定义类型)conversion function v.s. non-explicit-one-argument constructorexplicit-one-argument constructorconversion function (自定义类型转换为其余类型)比如自定义了一个Fraction分数类, 它应该可以被转换为doub

2020-11-07 18:57:59 130

原创 类相关 [持续补充]

文章目录类的设计规范头文件防卫式声明类的两种经典分类构造函数构造函数的初始化列表 & 函数体赋值无参构造函数 & 带有默认参数的构造函数私有化构造函数 (Singleton)成员函数隐藏的this指针类内实现 & 类外实现常量成员函数友元同一个类的所有实例之间互为友元操作符重载类的设计规范数据一定放在private中构造函数使用初始化列表参数传递 和 返回值 尽量使用引用成员函数需要加const的一定不能少头文件中的防卫式宏定义头文件防卫式声明#ifndef __

2020-11-07 13:35:43 135

原创 Object oriented design (OOD)

文章目录ObserverCompositePrototypeObserverComposite文件系统, 包含目录和文件, 目录又可以进一步包含文件和目录容器中存储的元素需要时同样大小的, 因此将目录和文件抽象成一个基类, 存储基类的指针Prototype如何创建未来的子类对象?让子类自己创建一个对象后, 将该对象添加到基类中, 基类对其进行拷贝一份即可.变量名 : 变量类型 (下划线表示静态数据)-表示私有, #表示protected, +表示public私有构造函数调

2020-11-07 13:35:29 155

原创 Object oriented programming (OOP)

文章目录Composition (复合) has-a构造和析构Delegation (委托) Composition by referenceInheritance (继承) is-a构造和析构virtual functionsTemplate MethodInheritance + CompositionComposition (复合) has-a一个类中包含另一个类对象的数据成员deque已经完成了所有功能, queue只是调用deque中所需要的功能, 来实现queue的特性adapter

2020-11-07 13:34:53 208

原创 new、delete、内存分配 的底层原理

文章目录newdelete实际分配内存的大小array new 搭配 array deletenew先调用operator new函数为对象分配空间然后调用构造函数, 初始化对象 (对象也可能会有申请堆空间)delete先调用对象的析构函数, 是把对象里可能申请的堆空间进行释放然后再调用operator delete函数释放为对象分配的空间.实际分配内存的大小调试模式会有额外的灰色模块非调试模式没有额外灰色模块上下cookies(红色部分)是必要的, 他用来记录一些信息便于

2020-11-06 16:28:20 558

原创 自定义实现String类

文章目录// mystring.h#ifndef __MYSTRING__#define __MYSTRING__using std::ostream;class String {public: // 需要调用默认构造函数的时候会调用下面这一个 // 传统的c字符串 String(const char* cstr = 0); // 拷贝构造 String(const String&); // 拷贝赋值 String& o

2020-11-05 19:52:31 180

原创 自定义实现Complex类

// complex.h// 防卫式的宏定义#ifndef __COMPLEX__#define __COMPLEX__/* forward declarations */using std::ostream;class Complex;Complex&__doapl(Complex*, const Complex&);/* class declarations */class Complex{public: Complex(double r = 0,

2020-11-05 17:59:52 346

原创 宏定义实现交换两个数、Python装饰器、数据库事务

文章目录宏定义实现交换两个数Python装饰器数据库事务四大性质 (ACID)四种隔离级别宏定义实现交换两个数#define swap(a,b) {a=b-a; b=b-a; a=a+b;}#define swap(a,b) {a=a^b; b=a^b; a=a^b;}#define swap(a,b,temp) {temp=a; a=b; b=temp;}Python装饰器装饰器本质上是一个函数或者一个类, 它接收一个函数作为参数, 然后将这个函数和一些额外功能代码打包成一个新的函数或者类

2020-10-28 18:50:21 185

原创 类型转换运算符、初始化列表的初始化顺序、构造函数、拷贝构造函数、赋值语句、创建子类对象、数组指针

文章目录类型转换运算符初始化列表的初始化顺序构造函数、拷贝构造函数、赋值语句必须使用初始化列表的情况创建子类对象数组指针类型转换运算符operator T() {} 返回值和T相同, 因此省略, 用来进行一些自定义数据的类型转换.为了避免歧义, T中不能有还有一个参数的构造函数, 否则T() 不知道是进行类型转换, 还是进行实例化.#include <iostream>using namespace std;class Test1 {public: int y;pu

2020-10-23 18:32:49 87

原创 六种常用搜索算法

搜索算法顺序搜索快速搜索二分搜索插值搜索跳跃搜索hash搜索顺序搜索O(n)int order_search(vector<int>& data, int target) { int n = (int)data.size(); for(int i = 0; i < n; ++i) { if(target == data[i]) return i; }}快速搜索平均O(n), 最坏O(n^2), 序列不需要有序获取第k+1大的元素(下标k-1)

2020-10-20 18:45:51 3990

原创 mysql中的索引结构 以及语句的时间效率查询

文章目录查看执行时间查看效率数据库中的索引实现聚簇索引 和 非聚簇索引MyISAM 和 InnoDB查看执行时间show variables; 查看profiling 是否为on如果是off, set profiling =1执行sql语句show profiles; 就可以查询到sql语句的执行时间 (打开profiling后所执行的所有sql语句都会记录其中)查看效率explain sqlid : select 查询的序列号select_type : select的查询类型, 主

2020-10-20 15:17:16 94

原创 内存对齐、变长结构体、strcpy/memcpy/compare/clear/erase、虚函数表、单链表冒泡排序、三数宏定义

文章目录内存对齐变长结构体strcpy、memcpy、comparevector中clear 和 eraseclearerase虚函数表单链表冒泡排序三数宏定义内存对齐结构体中数据成员的起始地址偏移量必须是自身大小的整数倍整个结构体的大小必须是最大数据成员大小的整数倍可以使用#pragma pack(n) 自定义所有偏移量的规则, 而无需考虑每一个数据成员和整个结构体#include <iostream>//#pragma pack(1)using namespace std;

2020-10-18 16:33:21 138

原创 格雷码原理总结

文章目录Gray Code (格雷码)特点产生变换方法第一种描述第二种描述二进制->格雷码格雷码->二进制格雷码所有位清0的步骤打印变化步骤Gray Code (格雷码)一种编码规则, 将1,2,3…这样的十进制数用另一种方式表示 (常用的是二进制表示). 要知道每个格雷码表示的数值是多少, 需要解码成二进制表示.特点相邻数字的格雷码之间只有一个二进制位不同产生传统的二进制表示法, 当在相邻的数字之间进行切换时, 会改变许多位. 比如3->4, 011->100

2020-10-05 19:11:44 3028 1

原创 字符串拼接效率、二叉树数组存储、map的使用、字符转字符串、bitset

文章目录字符串拼接二叉树数组存储索引map的使用字符转字符串bitset字符串拼接+ 拼接, 时间啊空间复杂度均很高, 因为需要重新开辟内存依次合并两个字符串push_back(char) 在字符串结尾添加字符append(str) 在字符串结尾添加另一个字符串string s = "";s+="a";s.push_back('a');s.append("dd").append("cc").push_back('a');cout<<s<<endl;二叉树数组

2020-10-01 14:04:39 105

原创 有限状态机、正则表达式、数字转字符串解密、字符串全排列、拼接数组中的数字

文章目录拼接数组中的数字( 有问题??? )字符串全排列数字转字符串解密正则表达式有限状态机拼接数组中的数字( 有问题??? )输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。当仿函数中使用<=进行比较时, 如果有过多的0, 会造成溢出, 为什么?????class Solution {public: class Itos { public: string operator()(int val)

2020-09-29 08:56:13 169

原创 丑数、BST转换成循环链表、栈的压入和弹出、十进制转换成二进制

文章目录丑数BST转换成循环链表栈的压入和弹出十进制转换成二进制丑数2, 3, 5三个数的倍数轮流放进DP数组, 谁小谁先放入就好像三个人轮流根据已经铺路的位置向前铺路, 谁能铺的最近, 就先铺并往前一步移到下一个已经铺好的位置class Solution {public:/* bool check_ugly(int n) { while(n != 1) { if(n % 2 == 0)

2020-09-28 09:08:08 80

原创 约瑟夫环、链表拷贝、数组中数字出现的次数、礼物的最大价值

文章目录约瑟夫环链表拷贝数组中数字出现的次数约瑟夫环递归f(n, m) 表示从n个数中每次删除第m个, 最后剩下的值的下标 (注意m是第m个, f是下标, m-1=f的)f(n, m) = (((f(n-1, m) + 1) + m%n ) - 1) % n = (f(n-1, m) + m) % n;f(n-1, m) + 1 是第几个, 也就是偏移量, f(n-1, m) + 1 + m%n 就是最终答案的偏移量, 求下标时应该-1取模, 最后化简就是(f(n-1, m) + m) %

2020-09-27 16:32:23 59

原创 位运算实现加法、输出大数、和为s的连续正数序列、判断二进制数中1的个数、BST的最近公共结点

文章目录位运算实现加法输出大数和为s的连续正数序列判断二进制数中1的个数BST的最近公共结点位运算实现加法不能 INT_MIN进行左移, INT_MAX左移一位溢出, 输出-2;class Solution {public: // 之前学的计算机中负数是以补码的形式参与运算, 与这里并不矛盾 // 这些位运算中, 负数参与的时候已经转换成了补码, 2^1 = 3, -2^1 = -1 (如果是原码, 应该是-3) // 位运算的时候, 符号位也参与了运算 int

2020-09-26 20:43:59 77

原创 最大公约数、最小公倍数、unordered_map使用pair类型

unordered_map 把pair作为keyclass hash_pair{public: size_t operator()(const pair<int, int>& p) const { auto p1 = hash<int>()(p.first); auto p2 = hash<int>()(p.second); return p1^p2; }};unordered_m

2020-09-25 11:40:21 159

原创 线段树 简单实现

线段树#include <iostream>using namespace std;const int maxN = 10000;// 建树的过程, 根据arr 填充 tree// start end 表示 node结点的范围, 每个结点是[start,end]的和void build_tree(int arr[], int tree[], int node, int start, int end){ if (start == end) { tr

2020-09-24 18:14:16 50

原创 算法--服务器数据分发

文章目录服务器数据分发服务器数据分发【题干描述】:我们共有n台服务器,每台服务器可以和若干个子服务器传输数据,n台服务器组成一个树状结构。现在要将一份数据从root节点开始分发给所有服务器。一次数据传输需要一个小时时间,一个节点可以同时对k个儿子节点进行并行传输,不同节点可以并行分发。问,全部分发完成,最短需要多少小时?【示例】:当共有5台服务器,其树状结构为0/ 1 2/ 3 4假设每一台服务器同时可以对1个儿子节点(k=1)并行传输,最优

2020-09-24 15:55:18 511

原创 查漏补缺[二]

文章目录类所占内存空间大小vector对象所占内存空间大小拷贝构造函数explicit 关键字 (显性的)map 和 unordered_map哈希冲突解决办法一致性哈希线程安全类所占内存空间大小空类对象所占内存空间大小为1类中有静态成员, 非静态成员函数, 非静态成员变量, 虚函数; 其中只有非静态成员变量 和 虚函数会占据类对象的存储空间虚函数会有一个寻函数指针, 指向一个虚函数表, 表里存放了虚函数的入口地址静态成员变量存储在全局区, 属于类本身静态成员函数 和 非静态成员函数都存

2020-09-21 09:50:05 106

原创 堆排序 & KMP算法

文章目录堆排序KMP 算法堆排序完全二叉树 : 除了最后一层, 所有层达到最大结点数, 最后一层结点靠左排列完美二叉树 : 所有层达到最大结点数 (一种特殊的完全)堆 : 一种完全二叉树, 每一个结点的值都不大于父结点(大顶堆), 都不小于父结点(小顶堆)完全二叉树采用数组存储, 父结点是 (i-1)/2; 左孩子是 (i2+1); 右孩子是(i2+2)堆排序分为两步 (升序)构造大顶堆 (O(n))将大顶堆头部元素和最后一个元素交换, 然后对剩下的元素进行大顶堆化 (O(nlogn))

2020-09-20 22:57:10 115

原创 自定义实现 Trie、HashSet、LRU

文章目录C++中的hash table自定义HashSet自定义实现LRU自定义实现TrieC++中的hash tableC++ STL中有四种关联式容器, map ,set, multimap, multiset; 他们底层是RB树, 查找的时间复杂度是O(logN)他们都有对应的hash table版本, unordered_map, unordered_set, unordered_multimap, unordered_multiset. 他们底层的实现是hash table, 查找时间复杂

2020-09-20 18:59:24 106

原创 中缀->前缀 / 后缀 & 前缀 / 后缀求值

文章目录前缀表达式求值后缀表达式求值中缀表达式 转换为 前缀表达式中缀表达式 转换为 后缀表达式小数点情况前、中、后缀表达式下述讨论只考虑非负整数情况前缀表达式求值前缀表达式 : 操作符在操作数前面的表达式从右至左(操作数先开始)依次扫描, 遇到操作数压入栈中, 遇到操作符op, 弹出栈顶两个元素, 栈顶元素 op 次栈顶元素, 计算结果再次压入栈中.直到全部扫描完毕/* * 只考虑+ - * /四种情况 */int preval(string s){ reverse(s.b

2020-09-20 15:24:16 160

原创 查漏补缺 [一] (树结构, 异常, 归并, 宏定义, 链表创建销毁)

文章目录引用字符串输入带空格字符串大小写转换string变量占用的内存空间异常自定义异常类型链表头插法 & 尾插法 & 析构宏定义归并排序红黑树删除结点插入操作BST、AVL、RB、B、B+BSTAVLRB树B树B+树B+树的优点引用引用- 引用必须初始化- 引用只能和一个对象绑定, 初始化的值不能是一个字面量 或者 表达式- 因为通过引用修改原来的值时, 后面两个无法修改- 引用有严格的类型要求常量引用必须初始化可以和任何值绑定, 对象, 字面量, 表达式都可因

2020-09-20 14:09:26 143

原创 STL常用算法------排序、拷贝替换、算数生成、集合

文章目录排序算法sortrandom_shuffle 洗牌merge 合并reverse 反转拷贝和替换copy 拷贝replace 替换replace_if 按条件替换swap 交换算数生成算法accumulate 累计求和fill 填充常用集合算法set_intersection 取交集set_union 取并集set_difference 取差集排序算法sort默认升序sort(v.begin(), v.end(), greater<int>()) 降序排列random_

2020-09-19 10:59:56 101

原创 STL常用算法------遍历 & 查找

文章目录算法遍历算法for_each 遍历容器transform 搬运查找算法find 查找find_if 条件查找adjacent_find 查找相邻重复元素binary_search 二分查找count 统计count_if 按条件统计算法遍历算法for_each 遍历容器遍历容器中的每一个元素, 对他们执行第三个参数提供的函数void my_print1(int val){ // 匿名对象 cout<<negate<int>()(val)<&l

2020-09-19 10:28:17 101

原创 仿函数

文章目录函数对象谓词一元谓词二元谓词内建函数对象算数仿函数关系仿函数逻辑仿函数函数对象重载函数调用操作符的类, 称为仿函数类 (使一个类的使用像一个函数), 其对象称为函数对象函数对象使用重载的(), 行为类似函数调用, 所以这个类也叫做仿函数仿函数(函数对象) 本质是一个类, 不是一个函数特点函数对象使用时和普通函数一样函数对象可以有自己的状态, 用一个成员属性揭露函数对象可以作为参数传递// 记录状态class MyPrint{public: MyPrint(

2020-09-19 09:20:21 114

原创 运算符重载

运算符重载实现自定义类型的运算对于内置数据类型的表达式的运算是不可以改变的 (1+1不能改成3)四个运算符不能重载, 八个点 ::, ., .*, :?加号运算符重载成员函数重载加号运算符class Person{public: Person operator+(Person& p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B; return

2020-09-19 07:42:11 68

原创 算法刷题[五]

文章目录stoi & atoi最长回文子串最近公共祖先买卖股票问题快速求幂股票最大利润stoi & atoi两者都是字符串转数字stoi参数是string , atoi参数是char*string转 char* s.c_str()stoi会进行边界检查. 如果超出int范围会抛出异常. atoi不会检查, 超出边界, 会输出边界.最长回文子串一个下标无法解决, 总是会有情况覆盖不到比如dp[i] 表示以i结尾的最长子串, 考虑不到开头的情况. 不同于有效括号

2020-09-18 20:21:25 49

原创 算法刷题[四]

文章目录总结cin, cin.getline(), getline()数组最少由多少个区间构成路灯照亮单词搜索岛屿问题子数组最大累加和判断BST 和 完全二叉树二叉树最大路径和平衡二叉树反转整数总结vector的迭代器可以执行加减运算, 因为vector底层是数组, 顺序存储. map迭代器不可以加减vector<pair<int, int>> v, 排序的时候会按照第一个元素first的升序排列 (使用仿函数, 更改排序规则) (使用这个容器可以存储数组中的值, 和它的下

2020-09-17 11:45:41 119

原创 [STL体系结构与内核分析 侯捷老师] (一)

泛型编程 (Generic Programming GP) : 使用template为主要工具进程编写程序四个层次使用C++标准库认识C++标准库良好使用C++标准库扩充C++标准库C++标准库 是 STL的超集, STL是在C++发展过程中补充进C++标准库的using namespace std; (using std::cout;)cplupluscppreference文章目录STL六大部件容器--结构与分类arrayvectorlistdeque (queue, st.

2020-09-16 23:06:59 195

1712952_姚运洋_并行第四次作业.zip

使用OMP实现梯形积分法, 所数组排序, 高斯消元法

2020-06-06

1712952_姚运洋_并行第5次作业.docx

使用MPI编程实现梯形积分法, 多数组排序, 高斯消元法

2020-06-06

纯CSS3全屏背景图片幻灯片轮播.zip

HTMLl + CSS3全屏背景图片幻灯片轮播, 不限照片数量, 具有四种形式的播放效果 HTMLl + CSS3全屏背景图片幻灯片轮播, 不限照片数量, 具有四种形式的播放效果 HTMLl + CSS3全屏背景图片幻灯片轮播, 不限照片数量, 具有四种形式的播放效果

2020-05-31

空空如也

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

TA关注的人

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