C++学习笔记
阿维的博客日记
这个作者很懒,什么都没留下…
展开
-
STL优先队列比较器
STL优先队列比较器原创 2024-04-08 22:05:37 · 226 阅读 · 0 评论 -
BUG未解之谜01-指针引用之谜
BUG未解之谜01-指针引用之谜原创 2024-03-24 12:16:26 · 415 阅读 · 0 评论 -
CPP容器vector和list,priority_queue定义比较器
CPP容器vector和list,priority_queue定义比较器原创 2024-03-21 14:36:28 · 544 阅读 · 0 评论 -
CPP优先队列priority_queue,定义比较器,重载operator()
CPP优先队列priority_queue,定义比较器,重载operator()原创 2024-03-08 20:56:00 · 184 阅读 · 0 评论 -
C++中的STL数据结构
C++中的STL数据结构原创 2024-02-23 15:23:32 · 425 阅读 · 0 评论 -
STL中使用[]重载的类
STL中使用[]重载的类原创 2023-12-03 10:04:23 · 98 阅读 · 0 评论 -
C++和JAVA帮助手册API
C++和JAVA帮助手册API原创 2023-12-02 09:45:20 · 49 阅读 · 0 评论 -
C语言求系统当前时间
#include <sys/time.h>#include <stdio.h>struct timeval tv; char buf[64]; gettimeofday(&tv, NULL); strftime(buf, sizeof(buf)-1, "%Y/%m/%d %H:%M:%S", localtime(&tv.tv_sec)); printf("%s\n" , buf);原创 2021-06-10 13:36:48 · 104 阅读 · 0 评论 -
declaration of ‘T‘ shadows template parameter
有问题的代码template<typename T>class X{ struct T* head;}改正后:template<typename T>class X{ T* head;}原因:真是自己????抽风了,多写了个struct,导致报错很久没解决!!!原创 2021-05-15 13:38:09 · 2753 阅读 · 0 评论 -
结构体嵌套对齐以及结构体中含有数组的对齐,也基本总结了各类结构体对齐的问题
基本的结构体对齐知识点击这里①结构体嵌套对齐以及结构体中含有数组的对齐32位系统环境规则一:结构体中含有数组,数组元素类型和结构中其余的最大类型取较大者 对齐规则二:结构体S2中嵌套结构体S1,则按照S1的最大元素类型和S2中各元素类型取较大者对齐就是max(sizeof(struct S1),sizeof(max_type_of_S2))注释的数字表示偏移量(就是地址)#include<iostream>#include<vector>struct S1 { c原创 2021-01-14 11:26:34 · 3213 阅读 · 0 评论 -
signal函数理解
void (*signal (int signo, void (*func)(int))) (int);等价于声明了signal是一种返回值是void (*p)(int) 的函数指针,假如这种类型的函数指针被typedef为type类型则signal函数的声明相当于是这样:,(其返回值是函数指针类型!!!)type (*signal)(int , void (*func)(int));其中type是void (*p)(int) 的类型的函数指针...原创 2021-01-13 12:16:36 · 305 阅读 · 0 评论 -
BFS+最短路径+邻接表C++
为了简化实现,我这里的权值默认都是1并且都是有向图,不是1的话,比较费劲,还没想到咋写因为默认权值都是1,所以BFS出来的第一个要找的末尾节点,的队列中就包含了最短路径,此时只需要从后往前遍历,找出前驱节点就万事大吉,因为我Node里面vertex1就保存了前驱节点,更具体的代码实现如下// 链表测试.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<list>#include<ve原创 2020-11-19 20:49:31 · 765 阅读 · 3 评论 -
40行代码2个栈模拟一个队列
思路已经在代码中#include <iostream>#include<queue>#include<stack>using namespace std;class Q {private: stack<int> s1; stack<int> s2;public : void push(const int& x) { s1.push(x);//添加元素时先把元素缓存在s1中 }原创 2020-11-14 19:15:14 · 73 阅读 · 0 评论 -
STL使用C++的find查找指定元素
#include <iostream>#include<list>#include<vector>#include<algorithm>using namespace std;struct Int { int x; Int(int x_=0):x(x_){} friend ostream& operator<<(ostream& os, const Int& x) { cou原创 2020-11-12 14:16:24 · 473 阅读 · 0 评论 -
快速上手智能指针之unique_ptr
一,代码示例#include <iostream>#include<memory>#include<vector>#include<iostream>using std::cout;using std::endl;using std::cin;using std::shared_ptr;using std::unique_ptr;using std::auto_ptr;using std::vector;using std::make_原创 2020-10-18 13:06:12 · 316 阅读 · 0 评论 -
快速上手智能指针之shared_ptr
用shared_ptr指向vector,利用智能指针管理vector比自己用智能指针申请数组好#include <iostream>#include<memory>#include<vector>#include<iostream>using std::cout;using std::endl;using std::cin;using std::shared_ptr;using std::unique_ptr;using std::auto原创 2020-10-18 11:41:43 · 685 阅读 · 0 评论 -
C++对象数组的读写
这里写目录标题对象数组的读写课堂笔记三级目录对象数组的读写以前对数组对象的读写总是崩溃,或者乱码,今天听老师讲了C++文件读写后,特意做点博客记录下来,今天收获最大的就是对象数组的读写了#include <iostream>#include <bits/stdc++.h>//万能头文件,不想费劲地包含头文件using namespace std;struct T{ int data; char a[10];//对象读写时,如果成员有string,一定要换原创 2020-10-13 07:13:18 · 1485 阅读 · 0 评论 -
推箱子游戏的C++实现
// 1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <stdio.h>//■#include <cstdlib>#include <conio.h>using std::cout;const int row = 12;const int col = 13;int x = 1;int y = 11;int map[row][col] = {原创 2020-10-11 19:07:48 · 404 阅读 · 4 评论 -
C++继承和Java继承的对比+动态联编的注意事项
#include <iostream>using namespace std;class A {public: void f() { cout << "A\n"; }};class B :public A {public: B() { } void f() { cout << "B\n"; }};int main(){ A a = B(); a.f();/原创 2020-10-02 09:01:11 · 221 阅读 · 0 评论 -
HEAP COPRUPTION DETECTED:CRT detected that the application wrote to memory after end of heap buffer
项目场景:某次做学校实验的过程中发现的bug,一不小心就debug了一天????????????问题描述:HEAP COPRUPTION DETECTED:CRT detected that the application wrote to memory after end of heap buffer(注:由于我的文件太庞大,所以换成下面简单代码展示改错误) 原因分析:提示:这里填写问题的分析:我的错误就是在于申请数组只申请了6个int的大小,读写数组的时候越界修改堆空间解决方原创 2020-09-14 17:16:16 · 301 阅读 · 0 评论 -
无法将参数:_cdecl*转换为_thiscall*解决办法
排序函数声明#pragma once#include <iostream>using std::swap;class Sort{};class Qsort {private: static const int CUTOFF = 100; static int median(int* a, int l, int r) { int m = ((l + r) >> 1); if (a[l] > a[m]) { swap(a[l], a[m]);原创 2020-08-19 18:23:08 · 2123 阅读 · 0 评论 -
堆排序-图片+代码详解
一,堆的有序性使堆快速执行的性质是堆的有序性每个节点都大于或者小于其儿子节点的关键字结论:堆的插入和删除都是O(logN)数据结构入队出队普通数组O(1)O(n)顺序数组O(n)O(1)堆O(logN)O(logN)堆的结构性质:①堆是一棵被完全填满的二叉树,有可能的例外是在底层,底层上的元素从左到右被填入,这样的树称为完全二叉树容易证明:②一棵高是h的完全二叉树有2h到2h+1-1个节点,这意味着完全二叉树的高是O(logN)③堆中索原创 2020-08-01 22:30:41 · 464 阅读 · 0 评论 -
二叉搜索树的增删改查
#pragma once#include<iostream>using namespace std;class Tree {private: struct Node { int data; Node* left; Node* right; Node(int value=0):data(value),left(nullptr),right(nullptr){} }; Node* root; void insert(int key, Node*& o);//插原创 2020-08-01 11:33:05 · 276 阅读 · 0 评论 -
C++函数重载解析
一,函数重载规则调用重载函数的过程可以简单的称为重载解析大致过程如下:①创建候选函数列表,根据函数名称选择匹配的函数。其中包含与调用名称相同的函数和模板函数②使用候选函数列表创建可行函数列表,这些都是形参数目正确的函数,为此,会有一个隐式的转换,比如float转换为double,long转换为double,而模板可以为double创建实例函数③确定是否有最佳匹配,有,则使用它,否则编译报错。对②的转换规则是:(Ⅰ)完全匹配,但是常规函数优先于模板函数(Ⅱ)提升转换,float转换成dou原创 2020-07-31 23:02:28 · 263 阅读 · 0 评论 -
C++学习笔记11-面向对象的一些零碎的笔记
一,友元友元函数:友元函数在类里面声明只是告诉编译器说,我现在有一个函数是类的友元,但这只是友元的声明!不是函数的声明!!就算你在类里面给出了这个友元函数的定义,也只是友元的声明!!所以如果在成员函数里面调用友元函数,则必须在类外再次声明一次这个友元函数,举个例子:就算你给出了友元的定义,没用!只算友元声明!!解决方法就是再声明一次!虽然这里报了警告,但是只要实现友元函数就行了!!在类里面直接实现友元或者到外面.cpp实现也行二,this的一些细节假设有一个类叫Class,那么其【原创 2020-07-28 22:26:12 · 155 阅读 · 0 评论 -
C++学习笔记10-继承和动态内存分配,易错点总结
动态内存分配:①派生类不使用newQ:是否需要为派生类重新定义复制构造函数,复制运算符,析构函数?A:不需要,子类中默认的复制构造函数,复制赋值运算符,析构函数就能完成所有的工作,虽然是浅层复制,但是由于子类中没有申请动态内存,子类默认的复制构造函数,复制赋值运算符,析构函数都将自动调用父类的复制构造函数,复制赋值运算符,析构函数,而父类的这些成员都是深复制的即可②派生类使用newQ:是否需要为派生类重新定义复制构造函数,复制运算符,析构函数?A:需要!!(Ⅰ)如何定义派生类复制构造函数原创 2020-07-23 22:41:28 · 123 阅读 · 0 评论 -
一篇就能让你懂左值右值!!
移动族左值如何判断左值?右值如何判断右值?简单粗暴一句话就是????左值与右值移动构造函数什么时候调用移动构造函数?左值左值在内存中有具体的地址存储,执行完一个语句之后,这个左值还会存在,但是右值属于那种就是如果你不用左值接收它,右值就不复存在了,也就是说,右值只是一个临时变量,供计算机读取而已。举个例子:int x=1,y=2;cout << x + y ;x,y都是普通变量,所以都是左值。x+y属于一个表达式,返回x+y的和,这个和没有名字,计算机只会把这个和存储在一个原创 2020-07-23 00:00:27 · 685 阅读 · 0 评论 -
C++学习笔记08-析构函数
①析构函数析构函数没有形参,~类名(){// 方法体}组成负责对类资源的回收,①delete动态内存资源,防止内存泄漏,②更新类的一些信息,比如对象总数量自减1③也没有返回值④不能被重载,析构函数是唯一的旧知复习初始化列表初始化顺序初始化列表用于构造函数,那么初始化列表的顺序就会按照类定义中声明的顺序去初始化而非初始化列表的顺序多重继承时调用构造器的顺序继承符号 : 后面依次继承多个类按照从左到右的继承顺序去调用基类的构造函数class Base1{}cl原创 2020-07-20 15:12:11 · 527 阅读 · 4 评论 -
C++学习笔记07-复制构造的坑
类的构造复制构造函数输出结果写在最后复制构造函数复制构造函数专门是用一个对象完成另外一个【声明的】对象的初始化如下面的代码所示#include <iostream>using namespace std;class Test{ private : int height; public : Test(int height_) : height(height_) { cout << "调用了普通构造原创 2020-07-20 11:01:38 · 125 阅读 · 0 评论 -
c++学习笔记06-const成员函数和对象数组
一,const成员函数c++面向对象的部分中,函数分为2部分①非const成员函数没有const的对象可以调用非const和const函数,const函数代表该函数不会修改对象,非const函数则相反②const成员函数,const对象只能调用const函数,不可以调用非const函数,因为要保证对象不能被修改结论const可以作为函数重载的标志,class Foo{ private : int member; public : void show() { co原创 2020-07-19 10:13:55 · 250 阅读 · 0 评论 -
C++学习笔记05-static与文件的注意事项
static成员c++禁止在类声明中初始化非常量成员也就是说,如果你的【static】类成员既不没有【const】,也不是enum成员那么c++编译器将禁止在类声明中初始化【static】成员典型编译报错如何为static成员赋值?在类实现中使用作用域解析运算符 :: 指出所属类,再对其中的static成员赋值...原创 2020-07-19 09:06:31 · 98 阅读 · 0 评论 -
C++学习笔记04-多态公有继承与虚函数
①多态公有继承作用;① 子类public的部分中拥有父类的public属性和public方法② 子类的private部分拥有父类的private属性和private方法,,但只能通过父类的public和protected方法访问初始化:通过调用父类的构造器和子类的构造器完成指针和引用的特殊用法:可以指向子类或者父类对象,父类指针和引用可以指向子类的对象,子类指针和引用不可以指向父类②虚方法(Ⅰ)virtual修饰方法,如果方法被声明为virtual,那么系统将根据指针,引用指向的对原创 2020-07-14 19:13:43 · 248 阅读 · 2 评论 -
C++学习笔记03-智能指针(shared_ptr,unique_ptr)和动态分配的数组
一,内存静态内存,栈内存,堆内存①静态内存存储局部static对象和类的static对象以及定义在任何函数之外的变量②栈内存栈内存用于保存定义在函数体内非static对象。③堆内存运行需要创建时,才申请的内存空间,只有当程序结束时,才回收,也就是说我们如果不需要这个对象时,我们必须手动释放这块内存空间,否则造成内存泄漏④智能指针智能指针可以在我们不需要动态申请的内存时,自动把这些内存归还给系统,防止了内存泄漏,而且我们通常会忘记delete动态申请的内存(智能指针的使用需要包含)二,s原创 2020-06-25 13:36:08 · 2011 阅读 · 0 评论 -
C++学习笔记02-constexpr和const和typedef和decltype和auto
c++中被const修饰的将视为常量,而不是只读的变量constexpr把变量声明为constexpr等价于把该变量声明为常量,而且该变量必须要用常量表达式初始化constexpr int a = 1;int const a = 1;等价声明注:constexpr是把变量给const了,例如下面的指针声明int i = 0 ;constexpr int * p = &i;int * const p = &i;等价声明以前常犯的typedef毛病char ch = 'a原创 2020-06-23 15:41:40 · 268 阅读 · 0 评论 -
C++学习笔记01-顶层const和底层const
顶层const定义:指针本身是一个常量,就是说,常量指针,p是常量,*p是可修改的底层const定义:指针指向的对象是一个常量,就是说*p是常量,而p是变量,*p只读,p可以修改举个例子:int i = 0 ;int * const p1 = &i;定义了一个常量指针,是顶层constconst int *p2 = &i; 定义了一个指针,*p2是只读,p2是变量,指针指向的对象是常量,所以是底层const顶层const和底层const的意义:C++:我不管这个数据是不是原创 2020-06-23 13:28:01 · 244 阅读 · 0 评论