自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构 LC

确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

2024-03-29 10:20:47 798

原创 BFS C++

/ 假设所有可能的密码组合不超过10000个。// 假设哈希表的大小足够大。先贴BFS 思想,借助队列往里塞,借助辅助数组看相邻哪个未被访问,将所有访问一遍。// 初始化一个数组来记录所有可能的密码组合是否被访问过。过不了测试用例:很难查,原因应该就是hash冲突吧。速度double,内存一半。不用hash表,直接巧妙借助数组实现。// 模拟哈希表来存储访问过的字符串。力扣 752. 打开转盘锁。

2024-03-27 17:16:12 196

原创 图论 概念及算法

先贴大佬的视频:https://www.bilibili.com/video/BV1hc41187JZ/?图中路径的最短路 Pathi in undired unweighted graph。要参加个机考,猛补一下图论相关的知识。Dijkstra算法(贪心的一种)树是联通 、无环、无向的图!+无穷 服务器 延迟。0还是无穷 看具体场景。

2024-03-26 23:42:40 214

原创 MIT OS ORG and SysCalls

但是这里的场景并没有很好的隔离性,比如说Shell中的某个函数有一个死循环,那么Shell永远也不会释放CPU,进而其他的应用程序也不能够运行,甚至都不能运行一个第三方的程序来停止或者杀死Shell程序。在Unix中,任何应用程序都能调用fork,我们以write为例吧,write的实现需要检查传递给write的地址(需要写入数据的指针)属于用户应用程序,这样内核才不会被欺骗从别的不属于应用程序的位置写入数据。所以,如果你要做大量的底层开发,C会是一个非常方便的编程语言,尤其是需要与硬件交互的时候。

2024-03-25 11:28:06 672

原创 MIT OS

这里比较关键的点是,每个进程都有自己独立的文件描述符空间,所以如果运行了两个不同的程序,对应两个不同的进程,如果它们都打开一个文件,它们或许可以得到相同数字的文件描述符,但是因为内核为每个进程都维护了一个独立的文件描述符空间,这里相同数字的文件描述符可能会对应到不同的文件。在这门课程的后面,你们会实现一些优化,比如说copy-on-write fork,这种方式会消除fork的几乎所有的明显的低效,而只拷贝执行exec所需要的内存,这里需要很多涉及到虚拟内存系统的技巧。它们在新的程序中表示相同的东西。

2024-03-24 01:05:29 774

原创 MIT OperationSystem

MIT OS学习

2024-03-23 10:49:33 292 1

原创 qt 调用自定义dll和lib

2.将lib文件及其***.h的头文件, dll文件,*lib文件及其头文件放入新工程的目录-------建议研发规范,将头文件放入include中,而动态库/静态库放入lib中。*.lib 和****.dll (此处dll文件>lib文件,通常来说若是一个为静态库一个为动态库,那么lib文件会大于dll,而且不是生成的dll为什么还会生成lib后续讲解)伴随的那个.lib文件里有相应的.dll文件的名字和一个指明.dll文件中函数入口的顺序表。上述动态库和静态库都会在对应的目录层级下生成相应文件。

2024-03-12 16:37:37 223 1

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

//尽可能延后变量定义的时间//两个例子#include using namespace std;//1.void encrypt(std::string &s);std::string encryptPassword(const std::string& password){using namespace std;string encrypted(password);return encrypted;}//循环1Widget w;for(int i = 0;

2021-03-11 11:40:26 44

原创 20-24条款

//#include//#include"do.h"//20.宁以pass-by-reference-to-const 替换pass-by-value:除了内置类型,函数对象和STL迭代器,其他都遵循20////21必须返回对象时,不要返回其引用;////22.将成员函数声明为private//为了更好的封装////23.宁以non-member、non-friend 替换member函数//为了更好的封装,代码直接解耦关系少此处指出一个浏览器的命名空间概念,可以声明一个命名空间。//n

2021-03-11 11:07:02 48

原创 18:让接口容易被正确的使用,不易被误用

////让接口容易被正确的使用,不易被误用////struct Day//{// explicit Day(int day) :m_day(day) {}// int m_day;//};////struct Year//{// explicit Year(int year) :m_year(year) {}// int m_year;//};//class Month//{//public:// static Month Jan() { return Month(1); }

2021-03-11 11:03:00 54

原创 条款16.成对使用delete new和 new[] delete[]\17.以独立的语句将newed对象置入智能指针

//#include//#include//using namespace std;////16.成对使用delete new和 new[] delete[]////17.以独立的语句将newed对象置入智能指针//typedef std::string AddressLines[4];//int main()//{//// string *pa = new AddressLines;// string *pb = new string;//// delete []pa;//此处如果

2021-03-11 11:02:21 37

原创 条款13:以对象管理资源

//资源管理//除了动态分配的内存,想文件描述器(file descriptors),互斥锁(mutex locks),图形界面中(font ,brush),数据库链接,以及网络(socket)//这些资源你都需要还给系统//条款13 以对象管理资源#include#include #include#includeusing namespace std;class Investment{};Investment* createInvestment(){Investment *pt

2021-03-10 18:27:17 35

原创 12:不要忘记复制所有元素和基类的元素

//复制对象时勿忘记其每一个成分#include#includevoid logCall(const std::string &funName){std::cout << funName << std::endl;}class Date {};class Customer {public:Customer(const Customer& rhs);Customer& operator=(const Customer& rhs);

2021-03-10 18:03:35 36

原创 09:别让异常逃出析构函数

//绝不在构造和析构函数中调用virtual函数#include#includeusing namespace std;class Transaction{public:Transaction(const string& logInfo);/virtual void logTranscation()const ;/void logTranscation(const string& logInfo)const;private://void init()//{// lo

2021-03-10 17:26:19 25

原创 08:别让异常逃出析构函数

//别让异常逃离析构函数#include#include using namespace std;class Widget{public:~Widget(){//此处如果异常被抛出,那么就会有问题,所以我们应该让析构函数吞下异常或者强制终止程序}};void dosomething(){vector v;}class DBConnect{public:static DBConnect create();void close();};class DBConn{

2021-03-10 16:56:03 32

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

//若不想使用编译器自动生成的函数,就该明确拒绝#includeusing namespace std;//class HomeForSale//{//public://private:// HomeForSale(const HomeForSale&);// HomeForSale& operator=(const HomeForSale&);//将其声明为私有成员函数然后再不定义他,这样的话,即使是friend或者mem函数调用他,会在链接期间发生抱怨//

2021-03-10 15:56:17 31

原创 条款5:C++默认编写调用哪些函数

//了解C++默默编写了并调用哪些函数#includeusing namespace std;class Empty {//相当于C++默认编写的函数//public:// Empty() {}// ~Empty()为了节省空间,编译器默认生成的析构函数不是虚析构函数,但是如果你继承的基类是虚析构函数的话,子类的析构函数也是虚函数。// {//// }// Empty(const Empty& rhs) {}// Empty& operator=(const Empt

2021-03-10 15:46:09 38

原创 条款4,确保对象被使用前已经初始化

//确定对象被使用前初始化#include#include#includeusing namespace std;class Point{public:Point(int a, int b) :x(a), y(b) {}public:int x;int y;};class PhoneNumber {};class ABEntry{public://初始化列表的作用是只调用一次拷贝构造函数,而如果在构造函数中直接应用赋值运算符初始化的话,会先调用一个默认的构造函数,然后在立刻

2021-03-10 15:32:04 51

原创 条款三:尽量使用Const

//尽可能使用const#include#include#includeusing namespace std;class Rational{};const Rational operator* (const Rational& lhs, const Rational&rhs){return lhs*rhs;}class TextBlock{public:TextBlock(string text) :m_text(text) {}public://此时如果

2021-03-10 14:59:35 45

原创 条款二:尽量以const,enum,inline代替define

//#include////尽量以const,enum inline替换#define//using namespace std;////#define Pi 3.15//#define fun(a,b) (a+b)//////const int total = 41;//最后使用const来替代#define 由于define会在预处理的时候替换,带编译器报错时,无法追踪到准确的信息////#define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))

2021-03-10 14:58:46 47

原创 STL中的array特殊性

C++primer 5th中说到STL容器其中array与其他容器的不同点:1.swap的使用swap的作用:交换两个相同类型的元素内容如:vector a{0};vector b{1};vector ::iterator iter=a.begin();swap(a,b);此时你访问迭代器,*iter的值应该是0.因为元素不会被移动,swap不对任何元素进行拷贝、删除或者插入操作,因此可以保证其在常数时间内完成。此外,array和string(String 我在VS2015试了,没有失效,

2021-02-05 13:15:51 62

原创 C++String的注意点和getline

1.String中的size()使用通常我们在刷算法题的时候,进行string的进行搜索时,会使用到size()这个类型例如:for(int i=0;i<str1.size();i++){//内容题}此时发现,str.size()的返回值类型为Unsigned char;所以如果使用int 进行比较的话,如果int为负,则会出现逻辑误差。例如:int main(){/string word;while (cin >> word){cout << wo

2021-02-03 10:40:05 298

原创 比较含退格的字符串

方法一:使用栈弹出class Solution{public:bool backspaceCompare(std::string s, std::string t){return build(s) == build(t);}std::string build(std::string s){std::stackstd::string ret;for (auto ch:s){if (ch != ‘#’){///字符转换成字符串std::string temp = “”;temp

2020-10-19 09:04:07 63

原创 C++关键字auto、typedef的说明

类型别名typedeftypedef double wages;tyoedef wages base,p;//此处p是 wages 的别名,也就是说,p是 double*类型的p A等价于 double *A;auto 自动类型auto让编译器通过初始值来推断变量的类型。1.所以auto定义的变量是需要赋初值的。2.auto连续定义的变量初始类型得一致。情况二:1.编译器推断的对象和初始值的类型并不完全一样,编译器会适当的改变结果的类型使其更加符合初始化规则。如:引用作为初始值in

2020-09-26 13:50:42 188

原创 开始记录我的学习和开发生涯

开始记录我的学习和开发生涯C++基础操作系统计算机网络数据库算法和数据结构常用的排序和查找算法九大排序和7大查找C++基础操作系统计算机网络数据库算法和数据结构常用的排序和查找算法九大排序和7大查找C++常用的...

2020-09-17 01:35:41 71

空空如也

空空如也

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

TA关注的人

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