
C++
高冷喵
这个作者很懒,什么都没留下…
展开
-
虚函数、虚表、虚指针
虚函数:使用virtual关键字修饰的成员函数,用于实现C++的多态性,可以在派生类中重新定义基类中的虚函数,虚函数是通过虚函数表来实现的。使用基类指针指向派生类的对象时,基类指针调用的虚函数是真正指向的派生类对象中对应的虚函数,而不是基类中定义的虚函数。此外,如果使用基类指针指向派生类的对象,但调用的不是虚函数时,都会调用基类中的那个函数。纯虚函数:在基类中不能对虚函数给出有意义的具体实现,可以将该函数定义为纯虚函数,它的实现由派生类实现。含有纯虚函数的类成为抽象类,抽象类不能实例化对象。虚表(虚原创 2021-09-16 17:58:26 · 334 阅读 · 0 评论 -
内存溢出、内存泄漏、内存越界
内存溢出:程序在申请内存时,系统没有足够的内存空间供其使用。内存泄露:向系统申请内存使用完后没有归还,导致有效内存被占用。内存泄露最终会导致内存溢出。例如:new一块内存使用,使用完后没有delete。内存越界:向系统申请一块内存后,使用时超出了内存申请范围。例如:通过下标取数组元素时,下标过大导致越界。...原创 2021-09-16 17:25:01 · 2291 阅读 · 0 评论 -
vector和list的区别
vector底层实现是数组,使用的是连续的存储空间,因此vector的访问速度较快,但从中间删除、插入数据的速度较慢。list底层实现是链表,使用的是非连续的存储空间,因此list的访问速度较慢,但从中间删除和插入数据的速度较快。总结:如果需要高效的随机存取,而不在乎插入和删除的效率,使用vector;如果需要大量的插入和删除操作,而不关心随机存取,则应使用list。...原创 2021-09-16 17:04:07 · 247 阅读 · 0 评论 -
归并排序
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <vector>using namespace std;vector<int> remerge(vector<int> left, vector<int> right) ...原创 2018-04-25 23:44:42 · 209 阅读 · 0 评论 -
引发了异常: 读取访问权限冲突。 p 是 0xCCCCCCCC。
// test.cpp : 定义控制台应用程序的入口点。//输入一个链表,反转链表后,输出链表的所有元素。#include "stdafx.h"#include <iostream>using namespace std;struct ListNode { int val; struct ListNode* next; ListNode(int n) { val...原创 2018-04-08 15:10:11 · 38172 阅读 · 9 评论 -
快速排序
快速排序:从序列中挑出一个元素,作为"基准"(pivot),我选择第一个元素作为基准把所有小于等于基准值的元素放在基准前面,所有大于基准值的元素放在基准的后面,这个称为分区(partition)操作:具体实现是:base为选择的基准值(第0个元素),left指向第1个元素,right指向最后1个元素。如果vec[left]<=base,则left往后移一个位置,如果vec[right]>...原创 2018-03-09 22:06:11 · 199 阅读 · 0 评论 -
堆排序
堆排序:从小到大(小顶堆:依次pop出最小的元素)方法1:基于堆的插入insert和删除pop两个操作进行的:先将数组中要排序的数值依次插入到小顶堆vec中,全部插入后,再将小顶堆的顶部数值依次pop出来,将剩余的元素形成小顶堆,再pop出第二小的元素。。。以此类推。此时,需要在class中新建两个vector成员变量用于保存插入进来的值和pop出去的最小值#include <iostrea...原创 2018-03-09 15:04:51 · 220 阅读 · 0 评论 -
冒泡排序、选择排序和插入排序
引用:https://www.cnblogs.com/eniac12/p/5329396.html注意:当直接对main函数中传入的vector操作时,需要传入引用,否则输出的结果不会改变。1、冒泡排序:比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一...原创 2018-03-09 15:01:47 · 382 阅读 · 0 评论 -
用堆实现最小的K个数的查找:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
#include <iostream>#include <vector>using namespace std;class Solution {public: vector<int> heap; void insert(int val){ heap.push_back(val); int index=he...原创 2018-03-07 17:22:32 · 1520 阅读 · 0 评论 -
大顶堆的实现:插入insert和删除pop(C++)
#include <iostream>#include <vector>using namespace std;class bigheap{ //大顶堆public: vector<int> heap; //堆的底层:数组//大顶堆插入一个数:先将要插入的数存放在堆的最后(即容器的末尾,下标为index),// 再与其父节点(下标为(...原创 2018-03-07 14:08:21 · 4242 阅读 · 0 评论 -
小顶堆的实现:插入insert和删除pop(C++)
#include <iostream>#include <vector>using namespace std;class litterheap{ //小顶堆//private:public: vector<int> heap;//堆的底层:数组//小顶堆插入一个数:先将要插入的数存放在堆的最后(即容器的末尾,下标为index),//...原创 2018-03-07 13:56:05 · 1792 阅读 · 1 评论 -
C++:前序中序后序非递归实现
(1)前序遍历:根左右vector Node(TreeNode* pRoot) { vector vec; stack s; //TreeNode* p; if(pRoot==NULL) return vec; while(!s.empty()||pRoot) {原创 2018-01-21 15:29:38 · 386 阅读 · 0 评论 -
友元friend和继承(C++)
friend :友元可以访问类的private和protected数据。基类的友元和基类本身可以访问基类的private成员,派生类不能访问基类的private成员。派生类的继承:1、公有继承(public inheritance):基类的public成员在派生类中为public成员,基类的protected成员在派生类中为protected成员。2、受保护继承(prote原创 2017-11-01 20:51:28 · 1905 阅读 · 0 评论 -
虚函数(C++)
在基类中用virtual声明成员函数为虚函数,定义的虚函数可以在派生类中重新定义,为次函数赋予新的功能。在派生类中重新定义此虚函数时,要求函数名、函数类型、函数形参个数和类型全部与基类中的一致。虚函数体现C++的多态性:1、如果调用非虚函数,则无论实际对象是基类类型还是派生类类型,都执行基类类型所定义的函数。2、如果调用虚函数,则知道运行时才能确定调用的哪个函数,运行的虚函数是引用原创 2017-11-01 11:27:48 · 243 阅读 · 0 评论 -
inline内联函数
inline内联函数:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置,相当于宏替换。好处:内联函数可以消除函数调用和返回所带来的开销(寄存器存储和恢复),坏处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大对时间要求比较高,而本身长度又比较短的函数定义成内联函数。内联函数必须在使原创 2017-11-01 10:50:02 · 224 阅读 · 0 评论 -
继承和虚函数在NS2中的应用(更好地理解累的继承)
虚函数作用:允许用基类的指针来调用子类的这个函数class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B : public A { public: void foo() { cout<<"B::foo() is called"<<endl原创 2017-09-06 16:50:47 · 256 阅读 · 0 评论 -
虚函数和纯虚函数的区别
纯虚函数就是没有函数体的,必须在派生类中重载函数。虚函数可以有函数体,如果派生类中没有重载函数,则调用父类的函数 classa { virtualb()=0;//纯虚函数 virtualc(){...}//虚函数 }; 虚函数主要实现多态机制 避免二义性问题 至于纯虚函数是抽象累机制基类提供接口 派生类提供实现 抽象类不能定义对象 ? 最大区别:有纯虚函数的类转载 2017-08-08 19:55:57 · 478 阅读 · 1 评论 -
C++三大特性:封装、继承、多态
C++封装继承多态总结面向对象的三个基本特征面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!封装转载 2017-08-14 21:50:09 · 246 阅读 · 0 评论 -
sturct和class的区别
STRUCT中的所有成员都是PUBLIC的,类中可以有PUBLIC,PRIVATE,PROTECTED。 STRUCT中不能包含成员函数但是CLASS中可以包括成员函数. class和struct的最基本的区别就是:在class中,在默认的情况下,它的成员是私有的,而在struct中,默认的情况下,它的成员是公有的! 但是在一般编程的习惯中,在struct中一般只定义数据部分原创 2017-08-14 19:39:04 · 489 阅读 · 0 评论