![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
小关_同学
这个作者很懒,什么都没留下…
展开
-
【C++】之《类继承》
类继承主要分为两类:函数接口继承(Function Interface Inheritance)和函数实现继承(Function Implementation Inheritance)。(1)Derived Class只继承成员函数的接口(声明);(2)Derived Class同时继承函数的接口和实现,并希望能够重写(Override)所继承的实现;(3)Derived Class同时继承函数的接口和实现,并且不希望重写任何东西。...原创 2020-08-21 15:36:26 · 191 阅读 · 0 评论 -
【c++】之《多才多艺的const》
C++中的const关键字有着神奇的功能,它允许你指定一个语义约束(也就是一个“不该被改动”的对象),并且编译器在编译阶段会保证该约束不被打破。(1)const可以修饰global对象;(2)const可以修饰文件、函数或区块作用域内被声明为static的对象;(3)const可以修饰class内部的static和non-static成员变量;(4)const可以修饰class内部的成员函数。...原创 2020-08-06 22:17:55 · 206 阅读 · 0 评论 -
【C++】之《编译器会为你生成的那些函数》
当你定义一个空类(empty class)时,编译器会为你生成以下函数:(1)默认构造函数:(2)拷贝构造函数:(3)拷贝赋值操作符:(4)析构函数:但需要注意以下几点:(1)有编译器所生成的这些函数的访问权限均为public,且均为inline函数;(2)这些函数只有被调用时,才会被编译器生成;(3)编译器所生成的析构函数为non-virtual。...原创 2020-08-05 15:40:07 · 167 阅读 · 0 评论 -
【C++】之《编译器为什么拒绝为你生成拷贝赋值操作符》
(1)类定义中存在引用成员变量(2)类定义中存在常量成员变量原创 2020-08-05 15:28:17 · 135 阅读 · 0 评论 -
【C++代码】之《桶排序》
#include <iostream>#include <vector>#include <algorithm>using namespace std;template <typename type>void BucketSort(vector<type> & array){ int length = array.size(); if (length <= 1) { return原创 2020-07-21 10:51:43 · 660 阅读 · 0 评论 -
【C++代码】之《单例模式》
#include <iostream>using namespace std;class Singleton{private: static Singleton* instance; Singleton() {};public: static Singleton* GetInstance() { if (instance == nullptr) { instance = new Singleto原创 2020-07-20 16:00:05 · 105 阅读 · 0 评论 -
【C++代码】之《归并排序》
#include <iostream>#include <vector>#include <assert.h>using namespace std;void Merge(vector<int> & vec, int start, int mid, int end){ vector<int> tempArray; int p1 = start; int p2 = mid + 1; int p =原创 2020-07-20 10:32:05 · 105 阅读 · 0 评论 -
【C++代码】之《最大栈》
#include <iostream>#include <stack>#include <vector>#include <assert.h>using namespace std;class MaxStack{private: stack<int> mainStack; stack<int> maxStack;public: void push(int num) {原创 2020-07-18 16:20:12 · 311 阅读 · 0 评论 -
【C++】之《移动语义》
原创 2020-07-17 10:15:23 · 148 阅读 · 0 评论 -
【C++】之《C++11》
(1)所有STL容器都支持初始化列表;(2)类型推导auto(3)遍历foreach(4)空指针nullptr原创 2020-07-16 11:09:56 · 111 阅读 · 0 评论 -
【C++】之《由源文件到可执行文件》
对于C++源文件,从文本到可执行文件一般需要四个过程:预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件...原创 2020-07-16 10:22:30 · 92 阅读 · 0 评论 -
【C++】之《类成员访问限定符》
C++ 通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限(也称为可见性),分别表示:公有的、受保护的、私有的。所谓访问权限,就是能不能使用该类中的成员。public:可以被该类中的函数、子类的函数、友元函数访问,也可以由该类的对象访问;protected:可以被该类中的函数、子类的函数、友元函数访问,但不可以由该类的对象访问;private:可以被该类中的函数、友元函数访问,但不可以由子类的函数、该类的对象、访问。如果声明不写 public、pro原创 2020-07-16 10:13:45 · 1463 阅读 · 0 评论 -
【C++】之《虚函数》
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。C++纯虚函数一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0” virtual void funtion1()=0二、引入原因 1、为了方便原创 2020-07-15 10:14:43 · 236 阅读 · 0 评论 -
【C++】之《智能指针》
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。(1)shared_ptr多个指针指向相同的对象。shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1原创 2020-07-14 11:31:46 · 125 阅读 · 0 评论 -
【C++】之《指针和引用》
(1)指针有一块自己的空间,二引用只是一个别名而已(2)使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小(3)指针可以被初始化为空指针,而引用必须被初始化且必须是一个已有对象的引用。(4)可以有const指针,但没有const引用(5)指针在使用中可以指向其他对象,但引用只能是一个对象的引用,不能被改变。(6)指针可以有多级指针,而引用只有一级(7)指针和引用使用自加、自减运算符时的意义不一样。...原创 2020-07-14 10:29:15 · 75 阅读 · 0 评论 -
【C++】之《强制类型转换》
C++中四种类型转换是:static_cast, dynamic_cast, const_cast,reinterpret_cast1、const_cast用于将const变量转为非const2、static_cast用于各种隐式转换,比如非const转const,void*转指针等, static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知;3、dynamic_cast用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如原创 2020-07-11 10:41:54 · 145 阅读 · 0 评论 -
【C++】之《static》
全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静态存储区初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除.原创 2020-07-11 10:35:10 · 218 阅读 · 0 评论 -
【C++代码】之《优先队列》
#include <iostream>#include <stack>#include <vector>using namespace std;// 最大优先队列class MaxPriorityQueue{public: vector<int> array; void push(int num) { array.push_back(num); int childIndex = arra原创 2020-06-21 10:27:04 · 142 阅读 · 0 评论 -
【C++代码】之《2的整数幂》
(1)常规解法#include <iostream>#include <stack>#include <vector>using namespace std;bool IsPowerOf2(int num){ if (num <= 0) { return false; } else { while (num % 2 == 0) { num原创 2020-06-16 10:08:55 · 757 阅读 · 0 评论 -
【C++代码】之《最大公约数》
(1)欧几里得算法#include <iostream>#include <stack>using namespace std;int GreatestCommonDivisor(int a, int b){ int bigger = a > b ? a : b; int smaller = a < b ? a : b; if (bigger % smaller == 0) { return smaller;原创 2020-06-14 10:25:15 · 195 阅读 · 0 评论 -
【C++代码】最小栈
#include <iostream>#include <stack>using namespace std;class MinStack{public: stack<int> mainStack; stack<int> minStack; void push(int element) { mainStack.push(element); if (minStack.empty() |原创 2020-06-14 09:41:33 · 118 阅读 · 0 评论 -
【C++代码】计数排序
#include <iostream>#include <algorithm>#include <vector>#include <string>#include <cstdlib>using namespace std;vector<int> CountSort(const vector<int> & vec){ int length = vec.size(); if (length原创 2020-06-09 14:31:33 · 326 阅读 · 0 评论 -
【C++代码】堆排序
#include <iostream>#include <algorithm>#include <vector>#include <string>#include <cstdlib>using namespace std;// 堆排序的算法步骤// 1、把无序数组构建成二叉堆// 2、循环删除堆顶元素void DownAdjust(vector<int> & vec, int parentIndex){原创 2020-06-08 22:08:42 · 376 阅读 · 0 评论 -
【C++代码】之《鸡尾酒排序》
#include <iostream>#include <algorithm>#include <vector>#include <string>using namespace std;void CocktailSort(vector<int> & vec){ int length = vec.size(); if (length <= 1) { return ; }原创 2020-06-08 11:03:41 · 207 阅读 · 0 评论 -
【C++代码】冒泡排序及其优化
#include <iostream>#include <algorithm>#include <vector>#include <string>using namespace std;void BubbleSort(vector<int> & vec){ int length = vec.size(); if (length <= 1) { return ; }原创 2020-06-07 22:05:30 · 170 阅读 · 0 评论 -
【C++代码】最长回文子串-DP解法
#include <iostream>#include <algorithm>#include <vector>#include <string>using namespace std;pair<int, string> longestPalindrome(const string & s) { // dynamic programming pair<int, string> max_substri原创 2020-05-27 00:26:52 · 166 阅读 · 0 评论 -
【C++代码】字符串中第一个出现一次
#include #include #include using namespace std;int FirstElement(const string & str){int length = str.size();if (length <= 0){return -1;}else if (length == 1){return 0;}else{map...原创 2020-03-10 18:00:18 · 131 阅读 · 0 评论 -
【C++代码】判断数组中比当前元素小的第一个数
#include #include #include using namespace std;vector FirstSmaller(const vector & v){vector result(v.size(), -1);int length = v.size();if (length <= 0){return result;}else{stack s...原创 2020-03-10 17:24:27 · 655 阅读 · 0 评论 -
【C++代码】丑数变体
#include <iostream>#include <vector>#include <algorithm>using namespace std;bool Ideal(int num){ while (num % 3 == 0) { num /= 3; } while (num % 5 == 0) { num /= 5; }...原创 2019-10-23 10:38:08 · 152 阅读 · 0 评论 -
【C++代码】链表反向输出
#include <iostream>#include <stack>using namespace std;struct Node{ int value; Node * next; Node(int a) { value = a; }};Node* reverse(Node* pHead){ if (pHead == nullptr || p...原创 2019-10-15 20:18:53 · 330 阅读 · 0 评论 -
Memory Assignment When Building An Object
一个类定义中可能存在这些:(1)成员变量(2)成员函数其中成员变量可以有以下几种:(1)普通成员变量。 int a;(2)指针成员变量。 int* d;(3)静态成员变量。 Static int b;(4)常量变量。 const int c = 0;成员函数可以有以下几种:(1)普通成员函数。 int add(int a);(2)虚函数。 virtual int add(int...原创 2019-08-09 10:06:14 · 121 阅读 · 0 评论 -
Static Binding and Dynamic Binding
当一个c++程序调用函数时,他将使用哪一段代码块呢?在此先声明一下,c++中全部函数源代码都存放在内存中的代码区,包括普通全局函数,普通类成员函数以及虚函数。其中识别普通全局函数只需知道函数的名称和参数(转化为相应地址的函数代码块);而识别普通类成员函数则需要知道类名,函数名以及参数(转化为相应地址的函数代码块);最后虚函数则是在创建一个类对象时专门添加了一个虚函数列表,用于存放虚函数的地址。...原创 2019-08-09 10:04:37 · 193 阅读 · 0 评论 -
【C++解析】const int * p 和 int * const p
c原创 2019-08-09 22:34:57 · 611 阅读 · 0 评论 -
直接插入排序和希尔排序C++代码
//直接插入排序void StraightInsertSort(vector<double> & v){ int size = v.size(); for (int i = 1; i < size; i++) { for (int j = 0; j < i; j++) { if (v[i] < v[j]) { double...原创 2019-08-31 19:10:51 · 221 阅读 · 0 评论 -
【C++代码】2到n的所有质数
vector<int> PrimeNumber(int n){ vector<int> v; if (n < 2) { return v; } else if (n == 2) { v.push_back(n); return v; } else { for (int i = 2; i <= n; i++) { if...原创 2019-09-01 11:00:43 · 1410 阅读 · 0 评论 -
【C++代码】快速排序
int GetIndex(vector<int> & v, int low, int high){ int temp = v[low]; while (low < high) { while (low < high && v[high] >= temp) { high--; } v[low] = v[high];...原创 2019-09-09 19:34:08 · 107 阅读 · 0 评论 -
【C++代码】二叉树中序递归遍历
在这里插入代码片void InOrder_pre(TreeNode* root, vector<int> & temp){ if (root) { if (root->left) { InOrder_pre(root->left, temp); } temp.push_back(root->val); if (root...原创 2019-09-12 21:26:45 · 392 阅读 · 0 评论 -
二叉树后序递归遍历
void Postder_pre(TreeNode* root, vector<int> & temp){ if (root) { if (root->left) { Postder_pre(root->left, temp); } if (root->left) { Postder_pre(root->rig...原创 2019-09-12 21:34:28 · 175 阅读 · 0 评论 -
【C++代码】二叉树先序递归遍历
void PreOrder_pre(TreeNode* root, vector<int> & temp){ if (root) { temp.push_back(root->val); if (root->left) { PreOrder_pre(root->left, temp); } if (root->left)...原创 2019-09-12 21:41:52 · 236 阅读 · 0 评论 -
【C++代码】三数求和
(1)暴力解,时间复杂度为Olog(n3)vector<vector<int>> Triple(const vector<int> & input){ vector<vector<int>> result; vector<int> temp; int N = input.size(); if (N <...原创 2019-09-22 22:01:19 · 2376 阅读 · 0 评论