自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 vscode C++自动补全失效

打开设置,搜索 IntelliSense。将以下两个设置改为 default、enabled。

2023-09-22 10:39:10 299

原创 vscode远程连接云服务器

编辑这个文件,其中 Host 可以随便取一个,我取的是 tx1, HostName 是服务器的公网 IP,User 是用户名。Ctrl + shift + p 打开搜索框输入 remote-ssh:connect to host,并选择第一个。选择第一个文件C:\Users\86133\.ssh\config。选择 Configure SSH Hosts。选择 Linux 并输入密码,就成功啦!回到刚才的一步,选择 tx1。在服务器那边设置好登录密码。

2023-06-16 10:01:23 253

原创 [数据结构]线索二叉树

有关线索二叉树的遍历,查找前驱/后继结点

2022-10-27 22:23:40 600 1

原创 TopK问题(快速选择)

TopK问题,利用了快速排序的思想

2022-10-23 21:01:49 241

原创 【数据结构】二叉树的非递归遍历(前序、中序、后序)

二叉树的三种非递归遍历

2022-10-21 11:15:52 335

原创 [AcWing]4398. 查询字符串

题目传送门:在此先对每个字符串进行预处理。使用哈希表 m ,键表示子串,值表示子串出现次数以及出现该子串的字符串。用 set 去重,如果子串在同一字符串中出现多次,第一次我们就已经做好相关的工作,那就不需要再管它了。后面查询子串时,只需询问哈希表即可。#include <iostream>#include <unordered_map>#include <unordered_set>using namespace std;int main(void) {

2022-04-09 22:17:35 68

原创 [洛谷]P6174 [USACO16JAN]Angry Cows S

题目传送门:https://www.luogu.com.cn/problem/P6174二分答案即可,注意 check 函数的编写。#include <bits/stdc++.h>using namespace std;bool isvaild(const vector<int>& v, int r, int k) { int i = 0, t = v[0] + 2 * r; --k; while (i < (int)v.size())

2021-12-14 14:19:16 2191

原创 [数据结构]字典树

字典树,是一种树型的数据结构,又称 Trie树、前缀树,用于高效地存储、检索大量字符串。利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。树中的边来代表有无字符以及是哪个字符,每个节点存储的信息有是否为单词结尾以及后续字符是什么。字典树的性质:1、根节点不表示字符串2、从根节点到某个节点,经过路径上所有的字符连起来就是该节点对应的字符串字典树节点里面存储的信息:用一个布尔值表示从根节点到当前节点为止,该路径是否形成了一个有效(有意义)的字符串children 是个数组,里面

2021-11-14 17:59:12 496

原创 [Leetcode]987. 二叉树的垂序遍历

987. 二叉树的垂序遍历给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row + 1, col - 1) 和 (row + 1, col + 1) 。树的根结点位于 (0, 0) 。二叉树的 垂序遍历 从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。返回二叉树的 垂序遍历 序列。示例 1

2021-11-05 18:14:44 78

原创 [Effective C++]条款15:在资源管理类中提供对原始资源的访问

APIS 往往要求访问原始资源,所以每一个 RAII class 应该提供一个取得其原始资源的方法对原始资源的访问可能经由显式转换或隐式转换。一般而言显式转换比较安全,但隐式转换对客户比较方便资源管理类是对抗资源泄露的堡垒。但是由于许多 APIs 会直接使用资源,所以需要一个函数可将 RAII class 对象转换为其内含的原始资源,有两个做法可以达成目标:显式转换:提供一个成员函数返回原始资源隐式转换:提供一个隐式转换函数 “operator 原始资源类型()” 使资源管理类型能够隐式转换..

2021-11-04 21:21:46 374

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

复制 RAII 对象必须一并复制它所管理的资源,所以资源的 copying 行为决定 RAII 对象的 copying 行为普遍而常见的 RAII class copying 行为是:阻止 copying、使用引用计数(reference counting)。不过其他行为也都可能被实现。当一个 RAII 对象被复制时,可以选择的行为禁止复制。许多时候允许 RAII 对象被复制并不合理。对一个像 Iock 这样的 class 这是有可能的,因为很少能够合理拥有“同步化基础器物”(synchroni.

2021-10-30 00:00:05 90

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

为防止资源泄漏,请使用 RAII 对象,它们在构造函数中获得资源并在析构函数中释放资源两个常被使用的 RAII classes 分别是 tr1::shared ptr 和 auto_ptr。前者通常是较佳选择,因为其 copy 行为比较直观。若选择 auto_ptr ,复制动作会使它(被复制物)指向 null把资源放进对象内,我们便可依赖 C++的“析构函数自动调用机制”确保资源被释放。以对象管理资源的两个关键点:获得资源后立刻放进管理对象(managing object)内。实际上“以对象管.

2021-10-29 23:58:42 109

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

拷贝构造函数应当确保复制对象内的所有成员变量以及所有的基类成分不要尝试以某个拷贝构造函数来实现另一个拷贝构造函数,应当将共同机制放到第三个函数中,并由两个拷贝构造函数共同调用任何时候,只要为子类撰写拷贝构造函数,都应该注意复制其基类的成员,如果是基类的 private 成员则应该调用相应的基类函数进行复制。...

2021-10-29 23:57:06 77

原创 [Effective C++]条款11:在 operator= 中处理”自我赋值“

确保当对象自我赋值时 operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及 copy-and-swap确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。自我赋值就是把对象赋值给自己,编写 operator= 的时候一定要考虑到这种自我赋值的情况。...

2021-10-29 23:55:40 78

原创 [图论]Dijkstra算法

Dijkstra算法Dijkstra 算法是基于贪心思想的,建立在有向有权图之上的,使用了广度优先搜索解决带权有向图或者无向图的单源最短路径问题,并且它要求不能存在负权边。算法步骤:将所有的顶点分为两部分:已知最短距离的顶点和未知最短距离的顶点。初始化时,已知最短距离的顶点只有起点。从当前尚未确定最短距离的所有点中,找到距离起点最短的点 x,标记为已访问,即把 x 放入松弛操作:通过点 x 更新其他所有点距离起点的最短距离如果所有点都已经求出了距起点的最短距离,则结束;否则,返回步骤2

2021-10-29 23:51:34 297

原创 [图论]拓扑排序

拓扑排序对一个有向无环图( Directed Acyclic Graph ,简称 DAG ) G 进行拓扑排序,是将 G 中所有顶点排成一个线性序列,使得图中任意一对顶点 u 和 v ,若边 <u,v>∈E(G) ,则 u 在线性序列中出现在 v 之前。通常,这样的线性序列称为拓扑序列。Kahn算法Kahn 算法利用了贪心思想。核心思想是:每个顶点的入度表示了该顶点依赖多个个其他顶点,如果某个顶点的入度为 0 ,说明该顶点没有依赖的顶点了。因此每次去掉入度为 0 的顶点,并放入结果数组中,

2021-10-29 23:46:28 162

原创 [C++]实现String类

参考《数据结构——C++实现(第二版)》科学出版社P119花了两天的时间大致完整地实现了一遍String。自己暂时还没有发现错误,如有错误或可以优化改进的地方,欢迎指出!提醒我自己要注意几个点:运算符返回引用还是对象?字符串后面会系统自动加上’\0’class String {private: char *pval; size_t length;public: String() : pval(nullptr), length(0) {} String(co

2021-10-29 22:55:25 140

原创 [数据结构]单链表

下面的写法中,链表没有虚拟头结点,只有头指针,这样也导致了要对第一个结点特殊对待,代码比较难看。如果加入了头结点,就可以一视同仁。template<typename T>struct Node { T data; Node<T> *next; Node() = default; Node(T d, Node<T> *n) : data(d), next(n) {}};template<typename T>class

2021-10-28 13:29:11 87

原创 [Effective C++]条款10:令 operator= 返回一个reference to *this

令赋值(assignment)操作符返回一个 reference to *this自定义类的行为应尽量和内置类型保持一致。比如说赋值的连锁形式:int x, y, z;x = y = z = 15; //相当于 x = (y = (z = 15))为了实现“连锁赋值”,赋值操作符必须返回一个 reference 指向操作符左侧的实参。...

2021-10-26 13:05:07 75

原创 [Effective C++]条款09:绝不在构造和析构过程中调用 virtual 函数

在构造和析构期间不要调用 virtual 函数,因为这类调用从不下降至 derived class(比起当前执行构造函数和析构函数的那层)语法上可以调用。但是实际上你不应该这么做,因为这会违反你的预期。在构造函数和析构函数中调用虚函数,调用的始终是基类的虚函数,不能达到多态的效果。因为在派生类对象的 base class 构造期间,对象的类型是 base class 而不是 derived class 。#include<bits/stdc++.h>using namespace s.

2021-10-26 13:01:57 86

原创 [数据结构]并查集

并查集(Disjoint-set data structure)是一种树型的数据结构,用于处理一些不交集(Disjoint sets,一系列没有重复元素的集合)的合并及查询问题。并查集的实现:开始时候森林中每个元素之间是相互独立的,也就是说初始时每个元素都是一个集合。如果某些元素在同一个集合中,那么它们就在同一颗树上。我们通常使用数组来存储这个森林。数组的下标表示元素的编号数组中的某个值如果是正数的话,说明该元素的父节点的编号就是这个正数是负数的话,就说明该元素是一个根节点,并且负数的绝对值表示

2021-10-25 21:17:03 184

原创 [Effective C++]条款08:别让异常逃离析构函数

析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么 class 应该提供一个普通函数(而非在析构函数中)执行该操作如果在析构函数中必须要执行某个动作,这个动作可能会在失败时抛出异常:// DBConnection类负责与数据库的连接class DBConnection {public: static DBConnection create(); void c.

2021-10-25 20:44:47 75

原创 6675ey

insert into s(sno,sname,status,city) values('s1', '精益', 20, '天津')insert into s(sno,sname,status,city) values('s2', '盛锡', 10, '北京')insert into s(sno,sname,status,city) values('s3', '东方红', 30, '北京')insert into s(sno,sname,status,city) values('s4', '丰泰盛',

2021-10-18 20:32:56 1644

原创 [C++]std::distance

std::distance:计算 first 和 last 之间的元素个数(也可以说成是距离)template<class InputIterator> typename iterator_traits<InputIterator>::difference_type //从traits取得迭代器型别 distance (InputIterator first, InputIterator last);如果传入的是 random-access iterator,就会使

2021-10-07 08:49:41 1148

原创 [Effective C++]条款07:为多态基类声明virtual析构函数

polymorphic(带多态性质的) base classes 应该声明一个 virtual 析构函数。如果 class 带有任何 virtual函数,它就应该拥有一个 virtual 析构函数Classes 的设计目的如果不是作为 base classes 使用,或不是为了具备多态性(polymorphically),就不该声明 virtual 析构函数当 derived class 对象经由一个 base class 指针被删除,且 base class 的析构函数不是虚函数,其结果未定义——.

2021-09-27 21:23:28 73

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

为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为 private并且不予实现。使用像 Uncopyable这样的 base class t也是一种做法我们想禁止一个类的对象拷贝和赋值,可以将拷贝构造函数及拷贝赋值函数声明为 private;也可以先写一个 Uncopyable class ,然后让那个类继承 Uncopyable。(C++11 也可以使用 =delete)...

2021-09-27 11:38:29 55

原创 [Effective C++]条款05:了解C++默默编写并调用哪些函数

编译器可以暗自为 class 创建 defaut 构造函数、copy 构造函数、 copy assignment 操作符,以及析构函数写下一个 empty class,如果你自己没声明,编译器就会为它声明(编译器版本的)一个 copy 构造函数、一个 copy assignment 操作符和一个析构函数。如果你也没有声明任何构造函数,编译器也会为你声明一个 default 构造函数。所有这些函数都是 public 且 inline 的。你写下:class Empty {};就好像你写下:cl.

2021-09-27 10:23:49 63

原创 [Effective C++]条款04:确定对象被使用前已先被初始化

为内置型对象进行手工初始化,因为 C++ 不保证初始化它们构造函数最好使用成员初值列(member initialization list),而不要在构造函数本体内使用赋值操作。初值列列出的成员变量,其排列次序应该和它们在 class 中的声明次序相同为免除“跨编译单元之初始化次序”问题,请以 local static 对象替换 non-local static对象永远在使用对象之前先将它初始化。对于无任何成员的内置类型,你必须手工完成此事。对于内置类型以外的其他东西,初始化责任落在 con.

2021-09-27 09:38:48 72

原创 [Effective C++]条款03:尽可能使用const

将某些东西声明为 const 可帮助编译器侦测出错误用法。 const 可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体编译器强制实施 bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)当 const 和 non- const 成员函数有着实质等价的实现时,令non- const 版本调用 const 版本可避免代码重复关键字 const 多才多艺,你可以用它在 classes 外部修饰 global 或 na.

2021-09-27 09:37:07 84

原创 [Effective C++]条款02:尽量以const,enum,inline,替换#define

对于单纯常量,最好以 const 对象或 enums 替换 #defines对于形似函数的宏(macros),最好改用 inline 函数替换 #defines宁以编译器替换预处理器。在C++中,常量成员、静态成员不能在类内初始化。必须在类内声明,在类外初始化。要使用类内初始化语法,常量必须是由常量表达式初始化的整数或枚举类型的静态常量class Tset { static const int a = 1; //OK enum {b = 5} //OK const .

2021-09-27 09:33:40 68

原创 [Effective C++]条款01:视C++为一个语言联邦

[Effective C++]条款01:视C++为一个语言联邦C++ 高效编程守则视状况而变化,取决于你使用 C++ 的哪一部分。C++支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)。四个次语言:C、Object-Oriented C++、Template C++、STL。...

2021-09-27 09:27:05 227

空空如也

空空如也

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

TA关注的人

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