![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
NickChen_0411
学生
展开
-
g++编译包含多个.cpp文件和.h文件的工程
g++编译多文件1.进入存放所有.cpp和.h文件的文件夹路径2.输入 g++ -c alien.cpp events.cpp gas_stations.cpp main.cpp officer.cpp planets.cpp spaceship.cpp spaceships.cpp trading_stations.cpp -std=c++113.输入 g++ alien.o eve...原创 2019-05-11 18:04:18 · 5504 阅读 · 1 评论 -
iostream Iterator 的使用
#include <iostream>#include <iterator>#include <algorithm>#include <vector>#include <string>using namespace std;int main(){ istream_iterator<string> is...原创 2019-01-14 18:34:53 · 268 阅读 · 0 评论 -
C++类有继承时,析构函数必须为虚函数
C++类有继承时,析构函数必须为虚函数。如果不是虚函数,则使用时可能存在内在泄漏的问题。 如果自己设计的C++类体系中存在继承关系,请注意父子类的析构函数关键字设置。虚函数是在基类中被声明为 virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载。 当一个类作为基类时,它的析构函数应该为虚析构函数(基类析构函数前加virtual关键字),这样才能保证调用子类的析构函数。...转载 2019-01-18 21:17:28 · 1698 阅读 · 0 评论 -
线段树的理解(转载)
http://www.cnblogs.com/TenosDoIt/p/3453089.html线段树的精髓在于:对区间做操作,可以高效实现,基本能保持每个操作的复杂度为O(logn) 线段树中的延迟标记概念...转载 2019-01-04 18:09:51 · 187 阅读 · 0 评论 -
字符串匹配——KMP(C++实现)
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很...转载 2018-12-11 17:50:02 · 1813 阅读 · 0 评论 -
Astar A*算法 最短路径算法
通常情况下,迷宫寻路算法可以使用深度优先或者广度优先算法,但是由于效率的原因,不会直接使用这些算法,在路径搜索算法中最常见的就是A*寻路算法。使用A*算法的魅力之处在于它不仅能找到地图中从A到B的一条路径,还能保证找到的是一条最短路径,它是一种常见的启发式搜索算法,类似于Dijkstra算法一样的最短路径查找算法,很多游戏应用中的路径搜索基本都是采用这种算法或者是A*算法的变种。下面我们来了解...转载 2018-12-10 20:23:31 · 6634 阅读 · 0 评论 -
SGU326 perspective 最大流 竞赛排名问题
题目大意:有n支NBA球队,这些队伍属于同一个半区,已知各队目前已经赢了几场以及还要打几场(赢了的场次和没打的场次不一定是和 相同半区内的对手),另外已知一个n * n的矩阵,a[i][j]代表i和j还要打的比赛场数。根据这些条件,请问队伍1有没有获得半区冠军的可能性 (若积分相同则均为冠军); 方法:构出图来是四列的网络流问题:第一列为源点,第二列为代表不含1的比...转载 2018-12-06 16:33:36 · 574 阅读 · 0 评论 -
最大流之Ford-Fulkerson算法(C++实现)
本文主要讲解最大流问题的Ford-Fulkerson解法。可是说这是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现。该方法依赖于三种重要思想:残留网络,增广路径和割。一、残留网络顾名思义,残留网络是指给定网络和一个流,其对应还可以容纳的流组成的网络。具体说来,就是假定一个网络G=(V,E),其源点s,汇点t。设f为G中的一个流,对应顶点u到顶点v的流。在不超过C(u,v)的条件...转载 2018-12-06 15:21:30 · 4974 阅读 · 2 评论 -
霍夫曼编码(C++ 优先队列)
霍夫曼编码 一般采用前缀编码 -- -- 对字符集进行编码时,要求字符集中任一字符的编码都不是其它字符的编码的前缀,这种编码称为前缀(编)码。算法思想:构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。 其实这就是一个贪心策略,属于...转载 2018-12-12 20:57:51 · 1885 阅读 · 1 评论 -
complex class (复数类的设计,不带指针的class)
包括内容有:合理使用:引用、const关键字形参尽量使用引用const 能加则比加运算符重载(一般设定为inline函数)友元函数:可直接使用类的private成员,提高程序运行效率尽量使用 冒号(:)的赋值方式对 构造函数进行初始化构造函数的函数重载类内定义的函数 == inline函数何时采用成员函数、何时采用全局函数临时类(Temporary obj...原创 2019-01-15 11:57:09 · 1357 阅读 · 0 评论 -
string class (字符串类的设计,带指针的class)
包括内容:深度拷贝:类中指针所指向的区域 需要拷贝new:先分配memory,再调用构造函数delete:先调用析构函数,再释放memory动态分配内存堆、栈的区别内存分配方式的可视化(release and debug)big three:拷贝构造、拷贝赋值、析构函数new/delete配合使用,注意加 [ ] 代码:mystring.h#ifn...原创 2019-01-15 21:58:12 · 623 阅读 · 0 评论 -
面向对象编程(笔记)
1.复合 (类中含有其他类) has-a2.委托(类中含有其他类的指针)has-pointer-to3.继承 is-a原创 2019-01-16 17:03:20 · 321 阅读 · 1 评论 -
string、const char*、 char* 、char[]相互转换(全)
string、const char*、 char* 、char[]四者类型经常会需要转化。一:转化总结形式如下:使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。二、总结方法:1、变成string,直接赋值。2、char[]变成别的,直接赋值。3、char*变constchar*容易,con...转载 2019-05-10 19:48:18 · 5063 阅读 · 0 评论 -
面向对象编程练习题(C++)
编写一个程序,定义长方形类,构造函数、拷贝构造、赋值构造、获取面积、获取IOU面积、获取交集面积、并集面积、面积大小比较、是否为同一长方形比较、自定义cout << 打印函数。代码:#include <iostream>using namespace std;class Rectangular{public: Rectangular(double...原创 2019-05-01 13:19:05 · 4285 阅读 · 0 评论 -
多线程实现快速排序
多线程排序,主要是将整个排序的序列分成若干份,每一个线程排序一份,所以线程排序完成之后,就进行归并,相当于多个有序序列合并成一个有序序列。这里就需要用到线程屏障,也就是pthread_barrier 系列函数。屏障,通俗的说就是一个比赛跑步的过程,所以队员就绪了,才能进行比赛。多线程排序也是,需要每个线程都是排序完成后,才能进行合并的过程。代码:#include <...转载 2019-04-28 18:01:04 · 6708 阅读 · 1 评论 -
深入浅出UML类图(OOP编程中梳理类之间的关系)
转载自:http://www.uml.org.cn/oobject/201211231.asphttps://www.jianshu.com/p/b8cebdb301b9?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation转载 2019-05-02 12:52:38 · 706 阅读 · 0 评论 -
C++中main(int argc, char **argv) 含义
写好main.cpp文件,通过g++编译得到可执行文件 main.exe(win环境)或 main.o(Linux环境)main函数代码:#include <iostream>using namespace std;int main(int argc, char **argv){ cout << "argc: " << argc...原创 2019-05-01 18:42:42 · 1034 阅读 · 0 评论 -
347. Top K Frequent Elements
Given a non-empty array of integers, return thekmost frequent elements.Example 1:Input: nums = [1,1,1,2,2,3], k = 2Output: [1,2]Example 2:Input: nums = [1], k = 1Output: [1]Note:You...原创 2019-04-14 10:56:40 · 196 阅读 · 0 评论 -
739. Daily Temperatures
Given a list of daily temperaturesT, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which...原创 2019-04-16 12:43:25 · 227 阅读 · 0 评论 -
322. Coin Change
You are given coins of different denominations and a total amount of moneyamount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money ...原创 2019-04-15 22:03:31 · 180 阅读 · 0 评论 -
单源最短路径——迪杰斯特拉(Dijkstra)算法 C++实现
求最短路径之Dijkstra算法Dijkstra算法是用来求单源最短路径问题,即给定图G和起点s,通过算法得到s到达其他每个顶点的最短距离。基本思想:对图G(V,E)设置集合S,存放已被访问的顶点,然后每次从集合V-S中选择与起点s的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令u为中介点,优化起点s与所有从u能够到达的顶点v之间的最短距离。这样的操作执行n次(n为顶点个数)...转载 2018-12-03 16:24:39 · 11902 阅读 · 0 评论 -
POJ - 3259 Wormholes(多种方法求负权回路)+译文
While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that i...转载 2018-12-05 20:45:39 · 541 阅读 · 1 评论 -
C++实现二叉搜索树的基本功能
文中包括BST的:初始化、析构、插入、删除(重点部分)、清空、查找、先序遍历、中序遍历、后序遍历代码:bst.h#ifndef BST_H#define BST_H#include &lt;iostream&gt;template&lt;typename T = int&gt;class BinaryTree{public: BinaryTree() = defaul...原创 2018-11-17 21:54:18 · 378 阅读 · 0 评论 -
红黑树 C++实现
转载自:http://www.cnblogs.com/skywang12345/p/3624291.html红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树的每个节点上都...原创 2018-11-22 22:26:36 · 210 阅读 · 0 评论 -
哈希表(C++实现)
关于Hash Table, 总结如下:散列表能够实现通过key 对元素的快速访问。 而且易于扩展。 对元素能够实现快速访问(搜索等字典操作), 这是Hash Table 较之于链表的优势所在, 二者均易于扩展。 而易于扩展这个dynamic的结构(使用链接法的时候)又是较之于array的优势所在。 因为数组时不易于扩展的。 使用散列表, 我们需要使用Hash function。 散...原创 2018-11-23 17:42:22 · 8503 阅读 · 1 评论 -
AVL数(平衡二叉树) C++实现
一般的二叉搜索树,在使用的过程中可能会慢慢变得不平衡,这样很可能会降低查找、插入等等的效率,因此我们需要使用算法来实现树的平衡。AVL树是一种比较经典的平衡二叉搜索树,它规定每个节点的左子树和右子树的高度差最多为1,代码如下。(参考博客中对remove函数的书写存在一定的问题,忘记在最后对每个结点进行height的更新,本文代码对此做出来修改,并用实例测试得以验证)avl.h#ifndef A...原创 2018-11-20 22:36:42 · 735 阅读 · 1 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而...转载 2018-08-07 20:23:51 · 141 阅读 · 0 评论 -
C++实用编程案例
自定义sort排序的编程案例:#include<string>#include<vector>#include<stack>#include <set>#include <map>#include <algorithm>#include <string>#include <i转载 2018-08-10 20:41:09 · 2520 阅读 · 2 评论 -
c语言中static 函数和普通函数的区别?
C程序一直由下列部分组成:1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。...转载 2018-08-06 15:18:28 · 277 阅读 · 0 评论 -
POJ 2186 Popular Cows(图论之强连通分量)
强连通分量之于有向图,与并查集之于无向图,在概念上极其相似,都是寻找互相联系的小部分内容。POJ 2186 Popular CowsDescriptionEvery cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= 10,000) cows, you ar...转载 2018-11-28 21:42:20 · 255 阅读 · 0 评论 -
Kosaraju算法解析: 求解图的强连通分量
参考博客:http://www.cnblogs.com/nullzx/ 1.定义连通分量:在无向图中,即为连通子图。上图中,总共有四个连通分量。顶点A、B、C、D构成了一个连通分量,顶点E构成了一个连通分量,顶点F,G和H,I分别构成了两个连通分量。强连通分量:有向图中,尽可能多的若干顶点组成的子图中,这些顶点都是相互可到达的,则这些顶点成为一个强连通分量。上图中有...转载 2018-11-28 22:10:52 · 747 阅读 · 1 评论 -
判断点是否在三角形内
参考文章:https://www.cnblogs.com/graphics/archive/2010/08/05/1793393.htmlhttps://blog.codingnow.com/2018/11/float_precision_problem.html#comment-47738https://www.zhihu.com/question/26022206 重心法:...转载 2018-11-29 21:47:05 · 350 阅读 · 0 评论 -
最短路径---Floyd算法(C++)
Floyd算法的介绍算法的特点: 弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。算法的思路通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入两个矩阵,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。矩阵P中的元素b[i][j],表...转载 2018-12-05 20:32:31 · 5623 阅读 · 2 评论 -
最短路径---SPFA算法(C++)
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是动态逼近...转载 2018-12-07 23:03:33 · 2409 阅读 · 1 评论 -
最小生成树之kruskal(克鲁斯卡尔)算法(C++实现)
参考博客:https://blog.csdn.net/YF_Li123/article/details/75195549 最小生成树之kruskal(克鲁斯卡尔)算法kruskal算法:同样解决最小生成树的问题,和prim算法不同,kruskal算法采用了边贪心的策略,思想要比prim算法简单。算法基本思想:在初始状态时隐去图中的所有边,这样图中每个顶点都自成一个连通块。之后执行下...转载 2018-12-01 20:58:49 · 4291 阅读 · 0 评论 -
图论——拓扑排序(C++实现)
有向无环图 如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图。拓扑排序 拓扑排序是将有向无环图G的所有顶点排成一个线性序列,使得对图G中的任意两个顶点u、v,如果存在边u->v,那么在序列中u一定在v前面,这个序列又被称为拓扑序列。如下图:结点0和1没有前驱节点,可以任意访问,但是结点2必须在结点0和1访问完之后才能访问,同理结点...转载 2018-11-28 11:34:56 · 2917 阅读 · 2 评论 -
KD-Tree(C++实现)
参考资料:https://blog.csdn.net/dymodi/article/details/46830071https://github.com/WiseDoge/libkdtree作为存取高维数据的一种数据结构,k-d tree 在静态查询和插入方面的效率还是很高的。本文在这里对 k-d tree 的内容作一些介绍,可能也会结合自己使用 k-d tree 的一些体验作一些点评...转载 2018-11-27 18:15:23 · 7102 阅读 · 0 评论 -
最小生成树之普里姆(prim)算法(C++实现)
最小生成树之普里姆(Prim)算法 最小生成树:是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。如上图给出了一个图G及其最小生成树T,其中红色的线即为最小生成树的边。最小生成树T包含了图G中所有的顶点,且由它们生成的树的边权之和为15,是所有生成树中权值最小的。最小生成树有3个性质:(1)最...转载 2018-12-02 22:54:11 · 3780 阅读 · 0 评论 -
Bellman-Ford算法原理及练习 || LeetCode 787
There are n cities connected by m flights. Each fight starts from city u and arrives at v with a price w.Now given all the cities and flights, together with starting city src and the destination dst...转载 2018-12-04 21:47:36 · 1532 阅读 · 0 评论 -
贝尔曼-福特(Bellman-Ford)算法——解决负权边(C++实现)
Dijkstra算法虽然好,但是它不能解决带有负权边(边的权值为负数)的图。接下来学习一种无论在思想上还是在代码实现上都可以称为完美的最短路径算法:Bellman-Ford算法。Bellman-Ford算法非常简单,核心代码四行,可以完美的解决带有负权边的图。for(k=1;k<=n-1;k++) //外循环循环n-1次,n为顶点个数 for(i=1;i<=m;...转载 2018-12-04 20:43:20 · 4407 阅读 · 0 评论