C++
文章平均质量分 60
C++
qnbk
这个作者很懒,什么都没留下…
展开
-
数据结构--跳表
跳表原创 2022-09-27 09:49:29 · 259 阅读 · 1 评论 -
数据结构 图
图原创 2022-05-27 16:00:15 · 369 阅读 · 3 评论 -
数据结构 B-树
B-树B-树B-数的插入实现B-树的插入B+树和B*树B+树B*树总结B-树的应用索引B-树1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树(有些地方写 的是B-树,注意不要误读成"B减树")。一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或 者满足一下性质:根节点至少有两个孩子每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以原创 2022-05-27 11:59:22 · 455 阅读 · 1 评论 -
LRU Cache
LRU CacheLRU Cache的实现LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。Cache:狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为I原创 2022-05-26 19:44:28 · 853 阅读 · 0 评论 -
数据结构--并查集
并查集并查集原理并查集实现并查集原理在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。并查集是一个森林–多棵树构成并查集由多个集合构成,每个集合都可以认为是一棵树并:合并多个集合查:两个值是否在一个集合举例:某学校招生10人,数学类招4人,英语类招3人,语文类招3人,原创 2022-05-27 08:30:00 · 137 阅读 · 0 评论 -
剑指 Offer II 116省份数量
省份数量题目描述:解题方法:并查集class UnionFindSet{public: UnionFindSet(size_t n) { _ufs.resize(n, -1); } void Union(int x1, int x2)//x1和x2所在集合的合并 { assert(x1 < _ufs.size()); assert(x2 < _ufs.size()); int root1 = FindRoot(x1); int root2 = Find原创 2022-05-26 18:22:07 · 121 阅读 · 0 评论 -
实现高并发内存池
高并发内存池什么是内存池池化技术内存池内存池主要解决的问题内存碎片malloc定长内存池高并发内存池整体框架thread cachecentral cachepage cache代码总体实现复杂问题的调试技巧vs2013性能分析实现基数树进行优化单层基数树二层基数树三层基数树代码实现什么是内存池池化技术所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己管理以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好,这样使用时就会变得非常快捷,大大提高程序运行效率。原创 2022-05-16 15:09:34 · 493 阅读 · 12 评论 -
C++ 类型转换
原创 2022-03-02 12:30:55 · 608 阅读 · 1 评论 -
C++ 智能指针
智能指针原创 2022-02-24 10:38:14 · 486 阅读 · 0 评论 -
C++ 异常处理
异常处理原创 2022-02-22 07:31:46 · 132 阅读 · 0 评论 -
C++11
C++11同一列表初始化initializer_listdecltype右值引用同一列表初始化初始化列表时,可以不添加等号struct Point{ int _x; int _y;};int main(){ Point p = { 1, 2 }; Point p{ 1, 2 };//可以不使用 '=' int x2{ 2 }; int* p = new int[4]{0}; int* p1 = new int[4]{1, 2, 3, 4}; return 0;}initi原创 2022-02-18 10:02:33 · 445 阅读 · 0 评论 -
C++ 特殊类设计
特殊类设计1、设计一个类,只能在堆上创建对象实现方法:1、将类的构造函数私有,拷贝构造声明私有,防止别人调用拷贝在栈上生成对象2、静态成员函数,在静态成员函数中完成堆对象的创建class HeapOnly{public: static HeapOnly* CreateObj()//创建 { return new HeapOnly; } static HeapOnly* CopyObj(const HeapOnly& h)//拷贝 { return new HeapOn原创 2022-02-07 10:48:55 · 403 阅读 · 0 评论 -
C++ 哈希
原创 2022-02-04 11:20:20 · 623 阅读 · 0 评论 -
C++ 两个数组的交集
两个数组的交集题目来源:leetcodeclass Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //用unordered_set对num2中的元素去重 unordered_set<int> s2; for(auto e: nums2) {原创 2022-01-28 20:04:43 · 1009 阅读 · 2 评论 -
C++ 在长度 2N 的数组中找出重复 N 次的元素
在长度 2N 的数组中找出重复 N 次的元素题目来源:leetcodeclass Solution {public: int repeatedNTimes(vector<int>& nums) { unordered_map<int,int> cmap; for(auto e: nums) { cmap[e]++; } for(auto& kv :原创 2022-01-28 19:56:21 · 680 阅读 · 1 评论 -
C++ 红黑树
红黑树原创 2022-01-28 19:00:27 · 1420 阅读 · 0 评论 -
C++ AVL树
AVL树底层结构AVL树(高度平衡搜索二叉树)AVL树的插入四种旋转右单旋左单旋右左双旋左右双旋AVL实现代码AVL树的性能底层结构map/set/multimap/multiset等这些容器其底层都是按照二叉搜索树来实现的但是二叉搜索树有其自身的缺陷,eg:往树中插入的元素有序或接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map,set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来来实现。AVL树(高度平衡搜索二叉树)二叉搜索树虽然可以缩短查找的效率,但如原创 2022-01-27 14:11:43 · 976 阅读 · 0 评论 -
C++ map和set
map和set原创 2022-01-27 14:06:00 · 840 阅读 · 0 评论 -
C++ 前K个高频单词
题目来源:leetcodeclass Solution {public: struct MapCompare { bool operator()(map<string,int>::iterator x,map<string,int>::iterator y) { return x->second < y->second; } }; vector<string>.原创 2022-01-26 15:35:31 · 258 阅读 · 2 评论 -
C++-- 二叉树的层序遍历
二叉树的层序遍历题目要求:题目来源:力扣class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { if(root == nullptr) { return vector<vector<int>> (); } queue<TreeNode*> q;原创 2021-10-24 10:42:52 · 1406 阅读 · 1 评论 -
C++ 根据二叉树创建字符串
根据二叉树创建字符串题目描述题目来源:力扣class Solution {public: string tree2str(TreeNode* root) { string s; _tree2str(root,s); return s; } void _tree2str(TreeNode* root,string& str) { if(root == nullptr) {原创 2021-10-24 10:31:22 · 150 阅读 · 0 评论 -
C++二叉树进阶
二叉树进阶二叉搜索树二叉搜索树概念二级目录三级目录二叉搜索树二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树时间复杂度:O(N),只有当树的形状接近完全二叉树或者满二叉树,才能达到 logN搜索二叉树延伸:AVLTree 红黑树(对搜索二叉树左右高度提出要求,非常接近完全二叉树,效率可达到 O(logN))原创 2021-10-24 08:58:55 · 2116 阅读 · 0 评论 -
C++---多态
多态多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数重写的两个意外协变析构函数的重写三级目录多态:多种形态,具体是完成某种行为,当不同的对象去完成时会产生不同的状态多态的定义及实现int main(){ int i; char c; cin >> i; cin >> c; cout << i << endl; cout << c << endl; //看起来用的是一个函数,但实际不是,这就是多态实现的 re原创 2021-10-20 17:20:40 · 196 阅读 · 0 评论 -
C++ 继承
继承继承继承概念继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化基类和派生类对象赋值转换继承继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化总结基类private成原创 2021-10-18 20:42:57 · 256 阅读 · 3 评论 -
C++ IO流
IO流C的输入与输出流C++IO流C++标准IO流C++ 文件IO流模拟写入写出String stream 简单介绍C的输入与输出C语言中输入输出方式是scanf()和printf()scanf():从标准输入设备(键盘)读取数据,并将值存放在变量中。printf():将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。对输入输出缓冲区的理解可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽原创 2021-09-29 13:25:05 · 247 阅读 · 2 评论 -
C++ 模板(进阶)
模板非类型模板参数类模板的特化概念模板特化的应用之类型萃取模板的分离编译非类型模板参数模板参数分类分为类型形参与非类型形参类型形参:出现在模板参数列表中,跟在class或typename之类的参数类型名称非类型形参:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可以将该参数当成常量来使用。注意:浮点数、类对象以及字符串是不允许作为非类型模板参数的非类型的模板参数必须在编译器就能确认结果类模板的特化概念通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊的类原创 2021-09-16 19:00:49 · 168 阅读 · 0 评论 -
C++ stack&queue
stack&&queuestack模拟实现stackqueue模拟实现queuepriority_queue仿函数模拟实现priority_queue容器适配器STL标准库中stack和queue的底层结构dequedeque的优势与缺陷为什么选择deque作为stact和queue的底层默认容器stack1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类原创 2021-09-14 20:22:35 · 156 阅读 · 0 评论 -
C++ 连续子数组的最大和
连续子数组的最大和题目描述题目来源:力扣class Solution {public: int maxSubArray(vector<int>& nums) { vector<int> sum; sum.resize(nums.size()+1); for(size_t i = 1;i< sum.size();i++) { sum[i] = max(sum[i-1]原创 2021-09-11 15:20:57 · 182 阅读 · 1 评论 -
C++数组中出现超过一半的数字
数组中出现超过一半的数字题目描述:class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); return nums[nums.size()/2]; }};原创 2021-09-11 15:12:00 · 167 阅读 · 0 评论 -
C++ 电话号码的字母组合
电话号码的字母组合题目描述题目来源:力扣string num_str[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};class Solution {public: void _letterCombinations(const string& digits,int i,vector<string>& ret,string s) { if(i == digit原创 2021-09-11 15:06:38 · 178 阅读 · 0 评论 -
C++ list
list相关接口的实现template<class T> struct _list_node { T _val; _list_node<T>* _next; _list_node<T>* _prev; _list_node(const T& val = T() ) :_val(val) , _prev(nullptr) , _next(nullptr) {} }; template<class T,class原创 2021-08-09 10:11:58 · 100 阅读 · 1 评论 -
C++--Vector相关接口的实现
Vector相关接口的实现template<class T> class vector { public: typedef T* iterator; typedef T* const_iterator; vector() :_start(nullptr) , _finish(nullptr) , _endofstorage(nullptr) {} vector(size_t n, const T val) //vector(int n, cons原创 2021-08-06 10:14:25 · 209 阅读 · 2 评论 -
C++ 杨辉三角
杨辉三角题目来源:力扣class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> vv; vv.resize(numRows); for(size_t i = 0;i <vv.size();i++) { vv[i].resize(i+1原创 2021-08-05 14:35:34 · 211 阅读 · 0 评论 -
C++ 迭代器失效
迭代器失效迭代器失效实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间迭代器失效有两种情况1、意义改变2、崩溃出现野指针引起失效的操作:1、指定位置元素的删除操作void test_vector4(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); for (auto e : v) { cout原创 2021-08-05 14:23:11 · 276 阅读 · 0 评论 -
C++ 只出现一次的数字
找出只出现1次的数字题目描述:题目来源:力扣class Solution {public: int singleNumber(vector<int>& nums) { int val = 0; // for(size_t i = 0;i<nums.size();i++) // { // val ^= nums[i]; // } for(auto e:nums)原创 2021-08-05 12:27:35 · 226 阅读 · 0 评论 -
解决String深浅拷贝
解决String深浅拷贝浅拷贝和深拷贝深拷贝实现写时拷贝String三级目录浅拷贝和深拷贝浅拷贝:浅拷贝也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就导致多个对象共同享用同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以当继续对资源进行操作时,就会发生访问违规深拷贝:给每个对象独立分配资源,保证多个对象之间不会因为共享资源而造成多次释放造成程序崩溃问题关于深浅拷贝解决方案有两种1、深拷贝2、引用计数拷贝+写时拷原创 2021-08-05 11:14:05 · 281 阅读 · 1 评论 -
C++ 替换空格
替换空格题目来源:力扣建议:不要使用string的replace+insert实现,因为它们都要挪动数据效率低下class Solution {public: string replaceSpace(string s) { size_t space = 0; for(auto ch:s) { if(ch == ' ') space++; } string原创 2021-08-01 10:30:35 · 198 阅读 · 0 评论 -
模拟实现C++中string的常规操作
string中常规操作reserveresizepush_backappendinsert+=[](改)finderase其他size()c_str()其余代码比较<<>> / getlinereservevoid reserve(size_t n)//开空间,扩展capacity { if (n > _capacity) { char* tmp = new char[n + 1]; strcpy(tmp, _str); delete原创 2021-08-01 10:13:16 · 148 阅读 · 0 评论 -
找出字符串中只出现一次的字符(C++)
找出字符串中只出现一次的字符题目来源:牛客思路:对字符串的每一个字符进行hash映射按顺序检测每一个字符是否只出现一次#include<iostream>#include<string>#include<list>using namespace std;int Hash(int key){ return key - 'a';}int FirstTimeChar(string &str){ int hashta原创 2021-07-27 16:50:00 · 804 阅读 · 0 评论 -
验证回文串(C++)
验证回文串题目来源:力扣思路:忽略大小写,只考虑字母通过首尾比较的方式,判断其是否为回文class Solution {public: bool isDigtalOrWord(char ch) { if( (ch>='0' && ch<='9') || (ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) re原创 2021-07-27 16:39:24 · 299 阅读 · 0 评论