- 博客(16)
- 收藏
- 关注
原创 C++ deque 双端队列
1.push_back尾插。如果最后一段区间没满,直接插入就行。反之,就需要重新开辟一块空间,并在map中记录起始地址,再插入。2.push_front头插头插的话也要开辟一块空间,但数据的存入顺序是在这一段空间的末尾倒着存入。3.[]随机访问虽然deque的底层空间并不是完全连续的,但每次开辟的空间buff大小是确定的。对要访问的下标先除buff空间大小找到在第几个buff上,再取余找到在buff上的第几个元素。我们知道头插数据是倒着存入的,如果第一段空间没有满又改怎么办呢?
2024-06-02 20:48:46 576
原创 双指针_复写零
我们先让cur dest 都指向第一个元素前面,cur先++,根据cur是否为0来决定dest走一步还是两步。直到dest指向最后一个元素。
2024-05-31 17:31:13 812
原创 C++ list用法
一.构造函数1.list (size_type n, const value_type& val = value_type())构造的list中包含n个值为val的元素2.list()构造空list3.list (const list& x)拷贝构造4.list (InputIterator first, InputIterator last)用[first, last)区间中的元素构造list迭代器不支持++=,支持++
2024-05-24 20:32:36 329
原创 C++ vector模拟实现
C++11会将 { } 括起来的内容识别为常量数组,然后构造成 initializer_list.initializer_list是一个特殊的模板类,用于表示一个初始化列表。当我们写完这两个构造函数,让我们来测试测试第一个构造函数。
2024-05-21 20:52:51 788
原创 C++ string 模拟实现
如果每读入一个字符就+ 就会频繁扩容。我们可以借鉴内存池的思想,先把读入的字符存到buff数组中,满了就一次性加入str中。对于=符号重载实现我们也可以直接用传值传参的方式,string& operator=(string str);这里itorarter begin()能翻回第一个字符的位置就可以,itorater 怎么实现的无所谓。对于>>重载,实现先清除原有字符串,再用is.get()一个一个读入(可以对入空格 回车)追加字符时要考虑扩容的问题(先申请足够大的空间,再复制原数据。
2024-05-17 16:56:46 223
原创 C++ String函数用法
常用的只有 append(const char* s)提前扩容就可以减少扩容次数,提高效率。基本上可以代替上面两个的功能。
2024-05-06 20:25:46 1108 2
原创 C/C++内存管理 new和delete
1.new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构 造函数和析构函数对于自定义类型,malloc申请了空间但不能直接对类的成员变量初始化。而new可以自动调用默认构造,没有默认构造也可以显式传参进行构造。对于多参数的构造函数,我们需要把要传的参数用{}括起来。new原理1.调用operator new函数申请空间。2.调用构造函数,完成初始化。delete原理1.调用析构函数,完成对象中资源清理的工作。
2024-04-21 21:32:16 1067
原创 类和对象(初始化列表,static成员,友元,内部类)
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的 成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化(声明在类内,定义在类外,相当于函数声明定义分离)class Apublic:private://声明//定义//光有定义,没有声明会报错概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外 部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
2024-04-17 22:41:01 753
原创 类和对象(构造函数,析构函数,拷贝构造函数,运算符重载)
构造函数是一个特殊的成员函数名字与类名相同创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。
2024-04-09 19:03:02 328 1
原创 类与对象(类,this指针)
关于类的定义,我们一般用class关键字来定义。class className//类的名字// 类体:由成员函数和成员变量组成// 一定要注意后面的分号//.hpublic://成员函数private://成员变量//.cppperror("malloc申请空间失败");return;_size = 0;我们可以看到 d1.Print() d2.Print(),明明调用的是同一个函数但打印结果是不一样的。C++编译器给每个“非静态的成员函数“增加了一个。
2024-04-06 19:54:27 1013
原创 类与对象( 命名空间,缺省参数,函数重载,引用,内敛,auto,范围for)
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。namespace 命名空间名字....////命名空间可以含变量,函数,结构体int val;//命名空间可以嵌套//命名空间可以含变量,函数,结构体int val;//同一个工程中可以有同名的命名空间 编译器会合成在一起 (命名空间可以不连续)// 例如在 .h .cpp中有重名的命名空间会合在一起//test.h//test.cpp。
2024-03-29 17:26:36 870
原创 排序算法的实现(插入,希尔,选择,冒泡,堆排,快排)
对n个元素进行选择排序,我们可以遍历一轮找出最大值放在末尾,直到循环n-1次。为了提高效率,我们可以同时找出最大值和最小值,分别放在末尾和开头。
2024-03-20 19:53:05 178 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人