![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
zhao111222333444
这个作者很懒,什么都没留下…
展开
-
【C++】智能指针的模拟实现
#include<iostream>#include<mutex>using namespace std;//智能指针的模拟//内部就是一个需要管理的空间//构造函数赋值,析构函数清理//指针要实现*,返回解引用后的空间,->返回指针//auto_ptr的核心是拷贝构造,赋值运算符的管理权转移(参数一定要引用!!!因为要拿走它的资源)//赋值运算符因为不是构造,要先判断不是给自己复制,在清理空间再复制,返回*thistemplate<class T&g原创 2021-09-15 21:09:33 · 195 阅读 · 0 评论 -
【C++】细节满满地lambda表达式讲解!
lambda格式捕捉列表说明:细节及使用作为仿函数格式lambda表达式书写格式:[capture-list] (parameters) mutable -> return-type { statement }[捕捉列表] (参数列表) 取消常量性 -> 返回值类型{函数体}lambda项目细节说明捕捉列表作为lambda表达式的起始标志,可以捕捉上下文中的变量供lambda函数使用参数列表与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略原创 2021-06-04 17:23:44 · 944 阅读 · 11 评论 -
【数据结构】哈希表--线性探测和哈希桶及unordered_set,unordered_map代码示范
哈希桶#include<iostream>#include<vector>using namespace std;//开散列//hash表封装了一个链表指针数组,和一个size(存放的元素个数)//链表指针数组里面就是单链表的节点//单链表节点template<class V>struct HashNode{ V _val; HashNode<V>* _next; //再写一个构造函数,插入等操作需要在某位置新建节点 HashN原创 2021-05-28 12:52:36 · 339 阅读 · 1 评论 -
【C++】static初始化
转载自此博客1.在C++中,全局static变量和class的static成员变量在main函数之前初始化,main函数之后销毁。2. 函数内部的局部static变量在该函数第一次被调用时初始化,在main函数之后销毁3.对于static数据即使是函数内部的对象则存放在全局数据区,全局数据区的数据并不会因为函数的退出就将空间释放。...转载 2021-05-16 10:38:59 · 2071 阅读 · 0 评论 -
【C++】map的[]operator
关联式容器由于二叉搜索树的特性,其中map有operator[],而set,multimap,multiset都不具备。我们先看官方的解释:每一次执行operator[],都在底层默认走一下的式子:operator[]经历了insert,所以它可以实现:1.(K为map已有的值)修改map中对应K的val;2.(K不存在)或者创建新的节点插入map;...原创 2021-05-14 16:51:49 · 311 阅读 · 0 评论 -
【数据结构】<KV>模型二叉搜索树实现
KV模型二叉搜索树:#include<iostream>using namespace std;template <class K,class V>struct BNode{ K _key; V _val; typedef BNode<K, V> Node; Node* _left; Node* _right; BNode(const K& key, const V&val) :_key(key) , _val(val)原创 2021-05-14 10:54:05 · 172 阅读 · 0 评论 -
【C++】菱形虚拟继承
注:Windows操作系统下32位程序普通继承我们先看普通的菱形继承,数据的存储情况:class A{public: int _a;}; class B : public A//class B : virtual public A{public: int _b;}; class C : public A//class C : virtual public A{public: int _c;};class D : public B, public C{public:原创 2021-05-07 16:07:24 · 82 阅读 · 0 评论 -
模拟实现priority_queue
#include<iostream>#include<vector>#include<functional>using namespace std;template <class T>struct Less{//注意名字不可以小写,会和库里的重复, bool operator()(const T&left,const T& right){ return left < right; }};template <原创 2021-04-18 16:34:29 · 93 阅读 · 0 评论 -
【C++】List的模拟实现
注意:1.List底层是链表实现的,所以要写一个链表的节点结构。2.List的迭代器是一个类,而其使用了泛型参数。3.List迭代器失效:仅会导致当前的迭代器失效,不会导致前面或者后面的失效#include<iostream>using namespace std;//List底层实现是双向带头循环链表,先一个链表节点存储数据template <class T>struct ListNode{ T _data; ListNode<T> _prev原创 2021-04-11 15:10:05 · 121 阅读 · 0 评论 -
【C++】模拟实现vector及迭代器失效问题的讨论
这里写目录标题迭代器失效一、二、三、总结vector简单模拟实现vector是表示可变大小数组的序列容器。迭代器失效一、要注意vector的迭代器失效问题。下面的例子是实际编程中的问题,第一眼看上去没啥问题,但其实reserve增容,开辟新空间后,size()在底层是(_finish-_start),但new增容之后_start是新地址的开头了,此时size()就没有意义了。 //void reserve(size_t n){ // if (n > capacity()){ // T原创 2021-04-08 17:30:30 · 140 阅读 · 0 评论 -
【C++】模拟实现string类
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>#include<string.h>using namespace std;class String{private: size_t _size; size_t _capacity; char* _data;public: typedef char* iterator; typedef const char* con原创 2021-03-31 20:32:13 · 552 阅读 · 1 评论 -
【C++】内存管理
内存管理1.C/C++内存分布2.从C语言的内存管理引入3.C++内存管理针对内置类型的基本操作管理对象管理对象数组针对自定义类型的基本操作operator new和operator delete1.C/C++内存分布1.栈区从高地址向低地址增长,存放非静态局部变量,函数参数等2.堆区从低地址到高地址增长,存放malloc,new出来的变量。3.数据段存放全局变量和静态变量4.代码段存放只读常亮,可执行代码。2.从C语言的内存管理引入C语言动态内存管理: link.这里面是博主对于c语原创 2021-03-18 19:39:36 · 151 阅读 · 0 评论 -
【c++】范围for详解及注意事项
范围for一般使用:通过for循环对数据进行修改:C++11中引入了范围for,他有几个注意点值得关注。一般这样写:for(auto e:obiect) cout<<e;e是用于迭代的变量.=object是一个对象,范围for实际上是通过迭代器实现的,支持迭代器访问的自定义类型才可以支持范围for循环。(比如:初始化列表,string,数组等)一般使用:void test(){ int arr[5] = { 1, 2, 3, 4, 5 }; char arr1[6] = "原创 2021-03-18 12:07:07 · 464 阅读 · 0 评论 -
【C++】友元类和内部类示例分析
友元类和内部类友元类内部类友元类和内部类都是c++提供的可以突破封装的类,他们的使用很相似,但也有细节上的不同。友元类友元类相比于友元函数是更符合面向对象思维的友元。定义:友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。特征:1.友元关系是单向的,不具有交换性。例如:一个类A中声明了类B是A的友元,B就可以访问A的私有成员,而A不可以访问B的私有成员。2.友元关系不能传递。单向都不可以都不用说传递了,友元类只看声明。友元类的声明格式://B是A的原创 2021-03-15 16:37:31 · 192 阅读 · 1 评论 -
【C++】友元函数
友元原创 2021-03-14 21:18:28 · 359 阅读 · 0 评论 -
【C++】日期类的创建
#include<iostream>using namespace std;class Date{ public: //天数 int getDay(int year, int month){ int dayarr[13] = { 0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int day = dayarr[month]; if (month == 2 && (year == 4 &原创 2021-03-12 08:56:15 · 374 阅读 · 0 评论 -
【C++】拷贝构造函数不能传值的原因探究
首先,拷贝构造函数就是以一个对象作为形参的构造函数.不能传值是因为传值的过程中,形参是实参的一份拷贝.我们的参数是一个对象,此时编译器调用拷贝构造函数.如果传值的话,我们在实现拷贝构造函数时需要调用拷贝构造函数复制实参,此时还未定义拷贝构造函数,就会陷入无穷递归…class Date{public: Date(int year = 2021, int month = 2, int day = 3) { _year = year; _month = month; _day .原创 2021-03-07 14:11:53 · 533 阅读 · 0 评论 -
C++内联函数使用说明(宏定义区别)
c++内联函数内联函数调用规则内联函数注意事项内联函数和宏定义差别内联函数是以inline关键字修饰的的函数,编译时 C++会在调用内联函数的地方展开,没有函数压栈的开销,是一种空间换时间的提升程序运行效率的方法。内联函数调用规则1.内联函数是一种建议,编译器自动优化,选择某含有inline关键词的函数是否会当做内联函数使用。定义为inline的函数体有递归或循环,编译器默认忽略内联。 一般函数代码少,频繁调用的会当做内联函数。内联函数注意事项2.内联函数不建议定义和声明分离,在链接时会报错。编原创 2021-02-04 13:45:46 · 187 阅读 · 0 评论