10 2022 档案
摘要:总结:进程是所有线程的集合,每一个线程是进程中的一条执行路径; 例如在有WiFi的情况下,使用爱奇艺下载多部电影,运行爱奇艺软件就是一个进程,多个路径下载多部电影就是不同的线程。 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里
阅读全文
摘要:class Solution { public: // 此处为自定义的reverse函数,其翻转为左闭右闭[]的翻转 void reverse(string &s, int start, int end) { for(int i = start, j = end; i < j; i++, j--)
阅读全文
摘要:1.reverse函数使用 函数功能:将序列[first,last)的元素在原容器中颠倒重排,包含在algorithm库中 reverse没有返回值 时间复杂度为O(n) 示例1:交换vector容器中元素的顺序 vector<int> v = {5,4,3,2,1}; reverse(v.begi
阅读全文
摘要:unique_ptr使用技巧
阅读全文
摘要:独占指针:unique_ptr unique_ptr 在任何给定的时刻,只能有一个指针管理内存 当指针超出作用域时,内存将自动释放 该类型指针不可Copy,只可以Move 运行结果 没有运行delete故没有调用析构函数 模板参数AA表示需要管理的普通指针的基类型是AA; p表示被管理的指针,p指向
阅读全文
摘要:C++指针分类 原始指针(raw pointer) 智能指针:智能指针是原始指针的封装,其优点是会自动分配内存,不用担心潜在的内存泄露 并不是所有的指针都可以封装成智能指针,很多时候原始指针要更方便 各种指针中,最常用的是裸指针,其次是unique_ptr和shared_ptr weak_ptr是s
阅读全文
摘要:原文链接:https://blog.csdn.net/zhang_si_hang/article/details/126398107
阅读全文
摘要:class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { std::unordered_map<int, int>map; for(int i = 0; i < nums.size(); i++) { /
阅读全文
摘要:new是关键字/操作符,而malloc是函数 new一个对象的时候,不但分配内存,而且还会调用类的构造函数(当然如果类没有构造函数,系统也没有给类生成构造函数,那没法调用构造函数了) 在某些情况下,“A *pa = new A()”可以把对象某些成员变量(如m_i)设置为0,这是new的能力之一,m
阅读全文
摘要:基础知识 C++中的存储区分为全局数据区、代码区、堆、栈。 全局数据区存放静态数据、全局变量、常量。 代码区存放所有类成员函数和非成员函数的代码。 栈区存放用于函数的返回地址、形参、局部变量、返回类型。 堆区存放余下的内存(new和delete)。 堆和栈的区别: 申请方式不同:栈是系统自动分配,堆
阅读全文
摘要:虚函数是使用virtual关键字说明的函数; 虚函数是实现运行时多态性的基础; C++中的虚函数是动态绑定的函数; 虚函数必须是非静态成员函数,虚函数经过派生之后,就可以实现运行过程中的多态;
阅读全文
摘要:多态: 1.多态的概念 字面上理解:多种表现形式 专业术语:C++允许父类的指针或者父类引用指向不同的子类对象,通过这个指针或者引用去调用不同子类的同名方法——>叫做多态; 父类的同名函数在不同的子类中具有不同的表现形式——>叫做多态; 多态要解决的两个问题: 问题一:参数具有通用性 解决方法:C+
阅读全文
摘要:指针作为函数参数传递的一些问题总结: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <iostream> #include <cstdlib> #include <cstring> using namespace std; v
阅读全文
摘要:void* malloc(size_t size); 其中参数size_t size表示动态内存分配空间的大小,以字节为单位。 size_t 是typedef重定义的类型,重定义这样数据类型的作用就是让使用者一目了然,指示使用者这个参数表示一个长度,在size后加上t,表示是整型相关数据类型的, 以
阅读全文
摘要:本质 引用是别名,指针是地址 具体分析 从现象上:指针运行的时候可以改变其所指向的值,而引用一旦和某个对象绑定之后就不再改变。指针可以重新被赋值以指向另外一个不同的对象。 但是引用则是总是指向在初始化时被指定的对象,以后不能改变,但是其指定对象的内容可以改变。 从内存分配上:程序未指针变量分配内存区
阅读全文
摘要:#include<iostream> #include<unordered_set> using namespace std; // 取数值各个位上的单数平方之和 int getSum(int n) { int sum = 0; while (n) { sum += (n % 10) * (n %
阅读全文
摘要:set::find搜索二叉树特性查找,时间复杂度为O(logN) 对比std::find std::find为暴力查找,时间复杂度为O(N)
阅读全文
摘要:相同点 push_back()与emplace_back()都是往尾部添加一个元素 不同点 底层实现机制不同: push_back()向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果拷贝的话,事后会自行销毁先前创建的这个元素) emplace_back()在实现的
阅读全文
摘要:1.基于范围的for循环的基本语法 在C++11中,为for循环添加了一个container(容器),它就会自动迭代;实现了对于vector型变量vec的内容打印,变量i遍历vector中的每一个元素, 直到vector的结束。 示例: vector<int> vec; //定义一个vector型变
阅读全文
摘要:
阅读全文
摘要:暴力的解法,两层for循环,同时还要记录字符是否重复出现,很明显时间复杂度是 O(n^2) 利用哈希表解法 class Solution { public: bool isAnagram(string s, string t) { // 定义hash数组 int num = 26; int hash
阅读全文
摘要:哈希表讲解参考连接: 原文链接:https://blog.csdn.net/weixin_40535588/article/details/121480672 此处源于代码随想录 哈希表的关键码就是数组的索引下标,然后通过下标直接访问数组中的元素 哈希表能解决什么问题? 一般哈希表都是用于快速判断一
阅读全文
摘要:class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode* fast = head; ListNode* slow = head; while(fast != NULL && fast->next != NUL
阅读全文
摘要:class Solution { public: ListNode* deleteback(ListNode*head, int n) { ListNode* dummyHead = new ListNode(0); dummyHead->next = head; ListNode* fast =
阅读全文
摘要:#include<iostream> using namespace std; struct ListNode { int val; ListNode* next; ListNode(int val) :val(val), next(NULL) {}; }; // 根据数组创建链表 ListNode
阅读全文
摘要:#include<iostream> #include<list> using namespace std; struct ListNode { int val; // 节点上存储的元素 ListNode* next; // 指向下一个节点的指针 ListNode(int x) : val(x),
阅读全文
摘要:struct ListNode { int val; ListNode* next; ListNode(int val) :val(val), next(NULL) {}; }; class Solution { public: ListNode* reverseList(ListNode* hea
阅读全文
摘要:#include<iostream> using namespace std; /* 1.获取第n个节点的值 2.头部插入节点 3.尾部插入节点 4.第n个节点前插入节点 5.删第n个节点 */ class MyLinkList { public: // 定义链表节点结构体 struct Linke
阅读全文
摘要:i++是指先使用i,使用之后再将i的值加一 ++i是先将i的值加1,然后再使用
阅读全文
摘要:1. vector的初始化方式 vectora(10);定义10个整形元素的向量(每个元素的初值为0) vectora(10,1);定义10个整形元素的向量(每个元素的初值为1) vectora(b);用b向量创建a向量,整体复制性赋值 vectora(b.begin(),b.begin()+3);
阅读全文
摘要:当创建对象时,自动调用构造函数,构造函数名字与类名相同,没有返回类型和返回值 一、构造函数作用 1.给对象一个标识符 2.为数据成员开辟内存空间 3.完成数据成员的初始化工作(函数体内的工作,由程序员完成) 二、构造函数分类 构造函数分为有参构造和无参构造,并且构造函数支持重载,其中构造函数重载,在
阅读全文
摘要:C++ 中返回值为指针或者引用的时候,不可以返回局部变量的指针或者引用,因为当此段代码块执行完之后,相应的局部变量, 就会被系统释放,指针所指向的那块内存会被操作系统用来做其他事情,当使用该指针就会报错; 错误示例 int* aa() { int a = 666; return &a; } int
阅读全文