C++
文章平均质量分 95
C++系列学习
饱和泽
使劲儿敲代码
展开
-
【C】文件操作
磁盘上的文件是文件,但是在程序设计中,我们一般涉及到的文件有:程序文件和数据文件两种。程序文件:包括源程序文件(后缀为.c格式的文件),目标文件(Windows环境下后缀为.obj格式的文件),可执行程序文件(Windows环境后缀为.exe格式的文件)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,如,程序运行的时候需要从该文件当中读取相对应的数据,或者接收程序运行时输出的内容到该文件当中去。接下来我们讨论的内容都是数据文件。原创 2023-11-12 18:46:15 · 149 阅读 · 0 评论 -
C语言基础内容小总结
3. 位操作符。原创 2023-11-11 16:30:50 · 149 阅读 · 0 评论 -
C++类和对象-类的默认成员函数之拷贝构造函数与赋值运算符重载函数
int _month;int _day;//使用d1对象拷贝构造d2对象对象构造成功,编译器完成拷贝的工作。类中并未实现对应的拷贝构造函数,那编译器有自动生成一份默认的吗?转到反汇编查看一下。实际上,编译器并未生成默认的拷贝构造函数,而反汇编中实际上是完成值拷贝的工作。拷贝是逐字节拷贝,即将d1中的内容原封不动地拷贝到d2中。原创 2023-08-18 12:39:35 · 397 阅读 · 0 评论 -
常见设计模式设计及其相应实现
设计模式(Design pattern):是针对设计问题的通用解决方案。是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,也使代码编制真正工程化。环境:vs2019。原创 2023-08-04 19:17:37 · 126 阅读 · 0 评论 -
C/C++内存管理
环境:vs2019class A {public :} ~ A() {int _a;free(ptr1);//3. malloc/free & new/delete 操作内置类型 int * ptr3 =(int *) malloc(sizeof(int));free(ptr3);free(ptr5);(1)malloc操作自定义对象malloc申请空间后,其空间内容是一个随机值。(2)new操作自定义对象申请内置类型的数据空间时,new和malloc并无不同;原创 2023-07-27 01:10:25 · 70 阅读 · 0 评论 -
C++中特殊类的设计
在C++类与对象中,C++98中,一个空类中编译器会默认生成六个成员函数,分别是构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、普通对象和const对象取地址重载函数;在C++11中增加了移动构造和移动赋值。而对于一些特殊的类,当用户未显式生成相应的方法时,我们也不希望编译器生成该方法。所以每当设计一个类的时候都得根据用户的需求来进行相应的设计。环境:vs2013。原创 2023-07-02 15:18:11 · 101 阅读 · 1 评论 -
【C++11】C++11相关特性的简单介绍(二)
这是因为对于sum++的这个过程,首先是从内存中读取数据到寄存器,然后数据在寄存器中进行运算,最后再将结果数据加载到内存中,对于这个过程,两个线程所处的状态都是随机的,可能同时也可能一前一后等,即sum++的操作并非是原子操作和线程安全的。实际上,每次传入不同的参数,都得生成一份,多份的模板会造成可执行程序非常的大,从而使得效率低下。如上,我们可以看到,对于自定义类型,根据排序需求的不同,我们得实现很多的类,我们若想以商品中的评价来进行升降排序的话,又得实现两份类,这在代码上就显得十分的多余和不便。原创 2023-06-13 14:02:18 · 57 阅读 · 0 评论 -
哈希扩展应用--位图与布隆过滤器
布隆过滤器是哈希和位图的相结合,所以它也是0/1数字来表征数据是否存在的状态标志位,所以其针对的数据也是整型数据,其也是解决位图表示状态太少的情况,用多个比特位一起来表示数据信息。在将两字符串hello和world都用相同的哈希函数进行映射时,一些位置会产生冲突,对于一些字符串的查找可能会产生误差,这就是为什么说布隆过滤器可以用来告诉你”某样东西一定不存在或者可能存在“。布隆过滤器如果说某个元素不存在时,该元素一定不存在,如果该元素存在时,该元素可 能存在,因为有些哈希函数存在一定的误判。原创 2023-06-09 11:41:19 · 66 阅读 · 0 评论 -
【C++11】C++11相关特性的简单介绍(一)
定义函数to_string,将数字转化为字符串,string to_string(int value)函数,其中函数只能使用传值进行返回,而传值返回的过程至少得一次的拷贝构造,实际上为两次,有些编译器会进行优化。当进行新对象的构造的时候,不将原对象的空间释放掉,而是进行空间资源的转移,将原对象的空间给新对象使用,这就少却了空间的开辟和数据的拷贝工作,提高了程序运行效率。在如上的例子中,若函数的返回对象为一个局部变量,此变量在出了函数作用域就不存在,此时就不能使用左值引用返回,只能传值返回。原创 2023-06-06 18:05:25 · 53 阅读 · 0 评论 -
shared_ptr-循环引用问题
前文我们阐述了智能指针的思想和进行了简单的实现,当然最后提出了shared_ptr引用计数的线程安全问题,最简单的方式就是通过加锁来进行实现。智能指针内容:C++ 智能指针原理及简单实现那解决了引用计数的问题就可以了吗?其实不然,要使shared_ptr是线程安全的,就还得解决shared_ptr的循环引用的问题。编译环境:vs2013C++11和boost中智能指针的关系(1) C++ 98 中产生了第一个智能指针auto_ptr。原创 2023-05-28 20:20:26 · 1067 阅读 · 0 评论 -
【C++】智能指针
智能指针可以帮助我们避免在申请空间后忘记释放造成内存泄漏的问题。实际上智能指针是一个类,而我们知道,类中的析构函数会在对象出了类作用域时调用析构函数进行资源的释放,所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。编译环境:vs20131 在最终的实现的shared_ptr,智能指针是线程安全的吗?原创 2023-05-21 12:49:48 · 1393 阅读 · 0 评论 -
unordered_set与unordered_map的模拟实现-哈希桶
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log2Nlog_2Nlog2N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。这里我们对unordered_map和unordered_set进行介绍和简单的模拟实现。原创 2023-05-10 15:09:44 · 72 阅读 · 0 评论 -
哈希介绍及哈希桶的实现
我们知道,关联式容器里面以红黑树作为底层结构的map、set系列容器在元素的查询效率上可达到O(log2Nlog_2Nlog2N) ,即最差情况下也只需要比较红黑树的高度次,但当树中节点非常多时,其查询效率也不是很理想。最好的查询是,进行很少的比较次数就能够将元素找到。以哈希桶为底层结构的关联式容器unordered_set、unordered_map等在元素的查找上面其效率可达到O(1)。实际上,哈希是采用空间换取时间的策略来提高元素查找的效率的。原创 2023-05-09 12:56:25 · 511 阅读 · 0 评论 -
内存操作函数介绍及其模拟实现
内存操作函数介绍及其模拟实现文章目录:前言:编译环境:vs2013memcpy文档作用:将num字节数的值从源指针指向的位置直接复制到目标指向的内存块。返回:返回目标指针指向的字符串。源指针和目标指针指向的对象的基础类型与此函数无关,结果是数据的二进制副本。该函数不检查源指针中的任何终止空字符 ,它总是准确地复制字节数。为避免溢出,目标和源参数指向的数组大小应至少为字节数,并且不应重叠(对于重叠的内存块,memmove 是一种更安全的方法)。memcpy模拟实现及测试:而当我们对自身进行元原创 2023-05-03 17:28:39 · 68 阅读 · 0 评论 -
字符串函数介绍及其模拟实现
C语言中对字符和字符串的处理是很频繁的,但是C语言中并没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。编译环境:vs2013以上字符串函数所在头文件为:#include里面。原创 2023-05-02 15:25:49 · 105 阅读 · 0 评论 -
map与set的封装实现-红黑树
编译环境:VS2013map的底层结构就是红黑树,故在进行map的封装实现时,实质其实也就是将红黑树中的相应接口包装一下,当然,set同理。原创 2023-04-23 15:48:59 · 184 阅读 · 0 评论 -
继二叉搜索树和AVL树后的红黑树
红黑树概念及其相关数据操作内容原创 2023-04-03 17:45:24 · 124 阅读 · 0 评论 -
继二叉搜索树后的AVL树
在map/multimap/set/multiset文档介绍中我们可以知道这几个容器有个共同点为:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,若往树中插入的元素有序或者接近有序,则二叉搜索树便会退化为单支树,其时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。编译环境:VS2013。原创 2023-03-31 11:55:24 · 72 阅读 · 0 评论 -
C++ 二叉搜索树
C++ 二叉搜索树原创 2023-03-16 14:39:50 · 85 阅读 · 0 评论 -
C++类和对象-类的默认成员函数之构造函数与析构函数
C++类和对象-默认成员函数构造函数与析构函数原创 2022-11-23 14:22:49 · 520 阅读 · 0 评论 -
C++类与对象-类成员函数的this指针
C++类与对象-类成员函数的this指针原创 2022-11-14 11:11:11 · 1452 阅读 · 0 评论