- 博客(60)
- 资源 (1)
- 收藏
- 关注
原创 c++数据结构与算法(7)——数组(四数之和)
1. 两数之和167. 两数之和 II - 输入有序数组15. 三数之和18. 四数之和————————————————————————1. 两数之和我个人喜欢哈希表,还是挺好理解的,保存每次遍历过的值,遍历后面时,找下是否有符合要求的前值class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>
2022-01-27 15:00:07
1551
1
原创 c++数据结构与算法(6)——数组(螺旋矩阵)
原来很怕的一种题型,但是面试的时候又经常碰到,今天算是硬啃下来了典型题目54. 螺旋矩阵59.螺旋矩阵 II885.螺旋矩阵 III————————————54.螺旋矩阵按照遍历方式层层剥开,该类型题方法比较固定,建议理解记忆class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<...
2022-01-20 12:42:52
2566
原创 c++数据结构与算法(5)——数组(二分搜索)
二分搜索典型题目704. 二分查找(简单)34. 在排序数组中查找元素的第一个和最后一个位置(中等)875. 爱吃香蕉的珂珂(中等)1011. 在D天内送达包裹的能力(中等)——————————704. 二分查找(简单)二分搜索的基础class Solution {public: int search(vector<int>& nums, int target) { int left = 0, right =.
2022-01-19 17:32:35
688
原创 c++数据结构与算法(4)——数组(滑动窗口)
本文是滑动窗口技巧典型题目:76. 最小覆盖子串(困难)567. 字符串的排列(中等)438. 找到字符串中所有字母异位词(中等)3. 无重复字符的最长子串(中等)———–76. 最小覆盖子串(困难)这个是最基础,最典型的滑动窗口问题,记忆并理解其中的细节,类似的就可以套用处理了条件是包含字串,所以算法思路是先找到符合条件的字符串,然后缩小到最小,更新最优解,再接着找下一解class Solution {public: string minWindow(s
2022-01-19 13:45:59
882
原创 c++数据结构与算法(3)——数组(前缀和数组,差分数组)
数组的题型最多,而且感觉更多的是考验算法技巧的使用,而非简单的数据结构,毕竟数组也没啥数据结构可言啊,本文是前缀和数组和差分数组典型题目:303. 区域和检索 - 数组不可变(中等)304. 二维区域和检索 - 矩阵不可变(中等)560. 和为K的子数组(中等)1109. 航班预订统计(中等)1094. 拼车(中等)-------------------------------------------前缀和数组基础,也是leetcode的303题class NumArr
2022-01-18 17:29:21
711
原创 c++数据结构与算法(2)——链表(反转单向链表)
反转链表,技巧也是dummy节点、双指针206. 反转链表(简单)92. 反转链表II(中等)25. K个一组翻转链表(困难)完全反转链表,记住这个,这是所有反转链表的基础/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListN
2022-01-17 17:04:42
343
原创 c++数据结构与算法(1)——链表(双指针)
方法归纳,dummy节点、双指针代表题型21. 合并两个有序链表(简单)23. 合并K个升序链表(困难)141. 环形链表(简单)142. 环形链表 II(中等)876. 链表的中间结点(简单)160. 相交链表(简单)19. 删除链表的倒数第 N 个结点(中等)----------------------------------------------------------------------------------------------------------
2022-01-17 13:44:49
711
原创 c++数据结构与算法
当你发现反复看书书收获不大,且对数组、链表有较深入了解的时候,可以看此教程第零章、必读文章 :: labuladong的算法小抄
2022-01-12 11:19:16
273
原创 容器的删除算法
烦恼删除后当前元素被删除,且容器size改变,倒序用的比较多,看到list的删除方法通过临时变量保存,还挺有意思,记录下//删除链表值为value的元素template <class T, class alloc>void list<T,alloc>::remove(const T&value) { iterator first = begin(); iterator last = end(); while (first != last) .
2022-01-06 14:47:49
343
原创 数组初始化vector
#include <stdio.h>#include <vector>using namespace std;int main() { int test[6] ={1,2,3,4,5,6}; vector<int> vectest(test, test+6); for (int i =0; i<6;i++) printf("%d ", vectest[i]); return 0;}
2021-12-30 21:27:10
477
原创 c++初始化列表
class Animal { public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } private: int m_weight; int m_height; }; 优雅嘛,哈哈
2021-12-30 15:03:04
444
原创 volatile关键字
"The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided.有这个关键字的原因是有些编译器会优化变量,认为你没有改变时就会直接取
2021-12-30 09:40:04
262
原创 ++那些事
#include<iostream>#include <bitset>using namespace std;class Point{private: int x;public: Point(int x1) :x(x1) {}; int getx() { return this->x; }; Point& operator++();//成员函数定义自增 Point operator++(int n); //后缀可以返回一个const类型的值 .
2021-12-29 21:07:03
120
原创 ubantu改国内镜像源
#备份原来的文件,以防改错。sudo mv /etc/apt/sources.list /etc/apt/sources.list.old#修改源sudo vim /etc/apt/souces.list#粘贴如下# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse# deb-src h
2021-12-29 09:20:10
181
原创 c++学习要求
1、算法 《剑指offer》所有题目背下来 leetcode刷400-500题2、数据结构 至少AVL、哈希表、堆这些简单的数据结构自己实现过链表、线性表必须熟悉到不能再熟悉比如vector为什么要加倍扩容而不是每次增加一个固定容量,BBST各种都能扯一下3、计算机组成原理 《深入理解计算机系统》过一遍 配套实验做一下4、计算机网络 看《计算机网络自顶向下的方法》,把应用层、传输层看完就行,关键搞懂TCP协议为什么要这么设计,为什么是三次握手,四次挥手,...
2021-12-28 11:21:54
845
原创 c++基础知识网站
csdn大量c++基础知识错漏,用这个网站用于自己查询补漏参考cplusplus.com - The C++ Resources Network
2021-12-28 10:13:55
268
原创 Windows上安装ubantu
windows上使用ubantu,一般用于学习,最常见的就是使用wmware安装ubantu的虚拟机了,这样好处是对windows入侵最小,坏处嘛也很多。wmware是收费的,尤其在现在国外厂商针对中国的情况下,使用盗版你要小心了,尤其是公司电脑。还有就是虚拟机的内存和磁盘分配的很有限,如果和其他使用的磁盘分区共用,还容易出现虚拟机损坏的情况。还有各种双系统的复制剪切问题,输入法问题等等。在使用一段时间后,切身感受到了,虚拟机并不是windows上使用ubantu的优秀解决方案,看似可以进去使用,但是一
2021-12-27 09:28:22
1011
原创 WebBench学习
很经典的测试开源项目,学习了下发现代码确实简单,整个代码分为三个部分1、getopt_long解析参数,并给对应的全局变量赋值2、根据全局变量的url、port构建全局变量request3、创建管道,fork预定个数的进程数,子进程运行信息写入管道w端,父进程一直等待,读取管道的r端...
2021-12-26 21:14:52
303
原创 fork预期个进程数
fork函数被调用一次,返回两次,一次父进程返回子进程ID,一次子进程返回0.由已知条件,fork预期进程数#include <unistd.h>#include <stdio.h> int main(void){ int i = 0; printf("i son/pa ppid pid fpid\n"); //ppid指当前进程的父进程pid //pid指当前进程的pid, //fpid指fork返回给当前进程的值 pi
2021-12-26 20:57:22
482
原创 关于windows错误信息(1407:找不到窗口类别)的原因
在对话框创建时,使用自定义的类XXYYZZ,以便于我们的程序检查是否有相同的实例运行。解决方案:InitInstance()增加注册 WNDCLASS wc; memset(&wc, 0, sizeof(wc)); ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc); wc.lpszClassName = "XXYYZZ"; // 该类名直接在CMainDlg资源里定义了 Af...
2021-12-13 17:00:22
993
原创 MFC杂症记事——(1)m_pMainWnd
记事缘由:虽接触良久,但一直不求甚解,关键也没开源,大概开源我也懒得看吧。不求甚解带来了很多恶果就是,诡异情况频出,鬼知道我怎么会碰到这么多问题。一同事为了解决程序主窗口启动前的登录窗口显示期间也显示任务栏图标,于是就在登录前把AfxGetApp()->m_pMainWnd设为了登录窗口,登录完毕后再重置为主窗口。乍听没啥问题,后面我在Initinstance中DoModal()返回-1,才发现了此处的问题。原因:用该成员变量m_pMainWnd去存储你的线程主窗口对象。当和m_pMainW.
2021-12-13 16:20:40
1038
原创 记一次单元测试奇怪问题
前言本人就职一家头部金融周边公司,熟悉本行业的人应该知道该行当的项目代码有几个特点。难度不高、技术老旧、超多文档、环境依赖复杂、测试困难。难度不高、技术老旧,本萌新初入公司,也曾不知天高地厚试图升级迭代本屌管理的模块,初始成功将本模块从vc6.0升级到vs2010,幸而本屌学识不深,但微软对于以稳定闻名的win7sdk为基础的vs2010也颇为值得信赖,让我小鸟我经过不长的项目周期就的以升级成功。就是这一次升级也让本鸟初识本行当的精髓”牵一发而动全身”。鉴于本鸟动了项目的基石,依赖的sdk从vc6.
2021-12-13 10:30:41
260
原创 写文件fputs后为什么要fflush
看ThinyWebSocket的时候有个疑问#define LOG_DEBUG(format, ...) if(0 == m_close_log) {Log::get_instance()->write_log(0, format, ##__VA_ARGS__); Log::get_instance()->flush();}为什么write之后还需要flush,这个flush有什么意义void Log::flush(void){ m_mutex.lock();
2021-12-02 11:16:46
956
1
原创 C++多线程学习(四)异步编程
前面刚大写特写多线程同步,这里怎么又扯到异步编程了,嘿嘿,其时两者的'步'不是一个东西,前面讲的同步,是对于所访问资源的有序处理,此处就是在接口层面,是被调用方是否执行完毕才停止阻塞,需要等待执行完毕就是同步,否则就是异步。熟悉windows编程的同学很容易就联想到一个东西了,SendMessage、PostMessage,其机制,优势、缺陷网上有太多的资料了,有过相关编程经验的人也都清楚其是怎么回事了。那么,这里我们深入探讨下,他们到底是如何实现的呢?同步这个不多说,顺序执行命令就是同步了,不需要额外
2021-12-01 16:37:25
1500
原创 C++多线程学习(三)——线程同步之条件变量
前面学习了互斥量似乎我们就可以多线程编程了,多线程也不过如此嘛。然而我们上手coding,用多线程来结局我们实际需求就会发现,似乎多线程也不是很好用。因为我们实际对于多线程的需求,往往线程都是while循环让其不断轮询执行,而不是简单的顺序命令执行完就结束线程了。让我们看个具体的例子深入感受下其中的痛点。//cond_var1.cpp用互斥锁实现一个生产者消费者模型#include <iostream>#include <deque>#include <threa
2021-11-30 16:05:42
1013
原创 linux查看接口头文件及其说明——man
假如我们知道某个接口是我们确认知道的比如: man pthread_mutex_initNo manual entry for pthread_mutex_init那么怎么办呢?究其原因是manpages 不是最新的我们需要更新到最新的sudo apt-get install glibc-doc manpages-dev manpages-posix-dev当然大部分情况我们是不知道接口在man里的具体名称,比如我想看pthread模块里面的cond的wait接口man .
2021-11-30 14:17:29
1522
原创 C++多线程学习(二)线程同步之互斥锁
前言上一篇文章C++多线程学习(一)线程创建与管理我们初步了解了线程的概念,以及一直与线程一起提出来的进程,两者的意义与区别。文章的末尾给了一个例子,初步学会了如何创建多线程,以及创建多线程,上面的例子,有个问题就是cout显示错乱,本文就会讲解,为何会发生错乱,以及如何解决。分析原因,先看下多线程的概念多线程并发:在同一时间段内交替处理多个操作,线程切换时间片是很短的(一般为毫秒级),一个时间片多数时候来不及处理完对某一资源的访问; 线程间通信:一个任务被分割为多个线程并发处理,多个线程可能
2021-11-30 13:06:49
1431
转载 C++多线程学习(一)线程创建与管理
前言我们都听说过摩尔定律:预计18个月会将芯片的性能提高一倍。早期的计算机时钟频率较低,比如1985年intel 80386 工作频率只有20 MHZ,提升CPU 核心的时钟频率带来的性能收益更大,到2006年Intel Core 2 处理器已经能够达到3.5 GHZ 的工作频率了。从2007年开始,CPU 时钟频率的提升就变得缓慢了,主要因为CPU 的功耗随时钟频率呈幂律增长,需要根据散热技术和制程工艺在性能与功耗间寻求平衡,既然CPU 时钟频率提升有限了,怎么继续按照摩尔定律提升性能呢?CPU 是
2021-11-30 10:45:28
805
1
原创 Win下远程编辑linux文件——samba
不习惯vim来编辑代码,找了个办法可以win下远程编辑linux代码首先安装samba, sudo apt-get install samba.安装好Samba服务器之后,win10访问会拒绝访问。解决办法:sudo vi /etc/samba/smb.conf,按i进行输入。文档末尾增加[share]comment = samba home directorypath = /home/sharepublic = yesbrowseable = yespublic = ye.
2021-11-30 10:06:11
879
原创 开源项目TinyWebSocket学习笔记(1)——getopt()
命令参数解析接口getopt()#include <unistd.h> extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt不向stderr输出错误信息。 extern int optopt; //当命令行选项字符不包括在o
2021-11-26 10:16:03
137
原创 设计模式C++实现(18)——访问者模式
定义:访问者模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间耦合解脱开,使得操作几何可以相对自由地演化。访问者模式的目的使要把处理从数据结构中分离出来。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的。// VisitorModel.h文件#pragma once#include &.
2021-11-25 16:41:56
114
原创 设计模式C++实现(17)——策略模式
定义:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。柑橘跟简单工厂模式没区别,不多写了//抽象接口class ReplaceAlgorithm{public: virtual void Replace() = 0;};//三种具体的替换算法class LRU_ReplaceAlgorithm : public ReplaceAlgorithm{public: void Replace() {
2021-11-25 16:11:37
322
原创 设计模式C++实现(16)——观察者模式
定义:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。看定义一股熟悉感铺面而来,windows消息分发机制、udp广播等等,由此可见使用相当之广泛啊。很好理解的一种模式,看下代码例子验证一下。#include <
2021-11-25 15:05:50
190
原创 设计模式C++实现(15)——备忘录模式
定义:在不暴露对象实现细节的情况下保存和恢复对象之前的状态。#include <iostream>#include <string>using namespace std;//备忘录Mementoclass Memento{private: string account; string password; string telNo;public: Memento(string account,string password,string telNo
2021-11-25 14:18:40
395
原创 设计模式C++实现(14)——中介者模式
定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。看定义感觉跟桥接模式、代理模式很接近,个人感觉没必要分的如此细吧,中介者模式大概区别就是管理的是一系列的对象。三者感觉分别就是多对多,一对一、一对多,在我看来都一样,实现有那么亿点点区别。class Mediator;//抽象人class Person{protected: Mediator *m_mediator; //中介public: virtua
2021-11-25 12:19:40
136
原创 设计模式C++实现(13)——迭代器模式
前置知识:c++模板类,对此不熟悉甚至没听过的同学可以左转c++基础知识定义:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。前言:学习c++以来,STL的使用贯穿整个程序代码,其中与其密不可分的迭代器也用了很多次了,但往往没有深究它的作用,原理到底是什么,结合这个迭代器模式的学习算是有了一个不错的认知了。#include <iostream>#include <vector>using na
2021-11-25 11:36:13
251
原创 设计模式C++实现(12)——解释器模式
定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。看定义感觉就不像个程序模式,相关资料不多,靠谱的更少,csdn找到了个例子,还是错误的,我整理修改下作为参考,看代码还是很容易理解这模式是什么。#include <iostream>using namespace std;class Expression{public: Expression() {};public: virtual bool Interpret(s
2021-11-25 11:15:20
500
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人