C++
Dracen_Wu
这个作者很懒,什么都没留下…
展开
-
C++函数新特性——函数模版
函数模版函数模版是通用的函数描述,使用泛型来定义函数,其中的泛型可用具体的类型(如int或double)来代替。通过将类型作为参数传递给模版,可使编译器生成该类型的函数。下面演示一个最简单的函数模版://交换两数据的值template<typename T>void Swap(T &a, T &b){ T temp; temp = a; a = b; b = te原创 2017-09-13 15:41:28 · 244 阅读 · 0 评论 -
C++11:右值引用
左值、右值,和右值引用左值(lvalue)右值(rvalue)是编译器和程序中常出现的词汇,一个最为典型的判别左值右值的方法是,在赋值表达式中,出现在等号左边的就是左值,出现在等号右边的就是右值。例如 a = b + c; 在这个表达式中,a就是左值,b+c就是右值。 不过 C++中还有另一种被广泛认同的说法:可以取地址的、有名字的就是左值;不能取地址的、没有名字的就是右值。 上述表达...原创 2018-04-08 14:15:47 · 239 阅读 · 1 评论 -
线程的创建
线程管理启动线程线程在thread对象创建时开始启动,传递给线程的函数运行结束时,线程也结束。//线程thread构造函数:template<class _Fn,class... _Args>explicit thread(_Fn&& _Fx, _Args&&... _Ax){ // construct with _Fx...原创 2018-03-22 14:26:57 · 228 阅读 · 0 评论 -
使用socket函数的一些常见错误
原文地址:使用socket函数的一些常见错误1.socketSOCKET socket( int af, int type, int protocol );af:常为AF_INET 使用AF_ISO等其他地址族标识,而非AF_INET。 返回:-1。 错误:10047(使用了与请求的协议不兼容的地址)type,通常为SOC...转载 2018-03-05 15:48:24 · 750 阅读 · 0 评论 -
C++ Most vexing parse
原文C++最令人烦恼的解析问题描述假如有如下示例://类Timerclass Timer{public: Timer(){ cout << "Timer()"<<endl; }}//类TimeKeeperclass TimeKeeper{public: TimeKeeper(const Timer& t) { ...原创 2018-03-16 08:57:04 · 381 阅读 · 0 评论 -
拓扑排序
拓扑排序拓扑排序是对有向无环图的一种排序方式,它使得如果存在一条从vi到vj的路径,那么在排序中,vj将出现在vi的后面。这在课程的先行课的安排中很有用,拓扑排序将不会破坏课程的结构要求。拓扑排序的方法一个简单的求拓扑排序的算法分为一下几步找出任意一个入度为0的顶点输出该点,并将它和它的边一起从图中删除重复步骤1,直到没有入度为0的点算法实现#include...原创 2018-02-08 18:19:48 · 306 阅读 · 0 评论 -
二叉堆中上滤和下滤的问题
在学习到堆排序时,对于上滤和下滤的知识掌握的不清楚,回来复习了一下。有了些感悟,记下来。上滤(percolate up) 上滤一般应用于在一个已经排序好的二叉堆中插入一个新节点。通过上滤,使堆在容纳了新节点后仍能保持原来的堆序。 上滤的主要思想: 首先在堆末新建一个空间,称为空穴(hole),然后比较穴的值和其父节点的值。如果空穴的当前位置满足整个堆的堆序,那么就把要插入的值赋给空穴原创 2018-01-29 18:08:49 · 3883 阅读 · 2 评论 -
优先队列(二叉堆)的基本实现
什么是二叉堆对于优先队列的实现,最常用的数据结构就是二叉堆。二叉堆是一棵完全二叉树, 因此借用完全二叉树的规律我们可以自上而下,从左到右地对每一个节点进行标记。这时,二叉堆便可以用一个数组表示而不必使用树形结构。 ① A / \ |0|1|2|3|4|5|6|7|8| ② B原创 2018-01-25 16:27:41 · 301 阅读 · 0 评论 -
左式堆的基本操作
什么是左式堆左式堆是一种有效地支持堆的合并操作的高级数据结构。左式堆既有二叉堆的结构性质,又有堆序性质。但和二叉堆不同,左式堆同时也是一棵二叉树,而二叉堆可以简化为数组。左式堆不是理想平衡的,事实上它也是趋于不平衡的。左式堆的性质我们把任一节点X的零路径长(null path length)npl(x)定义为从X节点到一个不具有两个儿子的节点的最短路径的长度。 因此,具有0个或1原创 2018-01-25 15:38:21 · 379 阅读 · 0 评论 -
二叉树搜索树的懒惰删除及相关的其他例程
对于一棵二叉树,如果删除的次数不多,通常可以使用懒惰删除策略:当一个元素要被删除时,它仍留在树中,只是做一个删除的记号。但因为这个记号的存在,所以要修改插入等其他操作。代码的最后给出了删除叶子节点和输出指定范围内的节点的定义,仅供参考。#includeiostream>#includecstdlib>using namespace std;templatetypename T>c原创 2018-01-18 18:00:37 · 768 阅读 · 0 评论 -
二叉搜索树常规例程
二叉树的常规例程,包括插入节点、删除节点、清空二叉树、是否包含某一节点等 方便起见,二叉树节点类的三个变量没有进行封装,实际操作中应设置为templateclass BinaryTree{private: T element; BinaryTree* left; BinaryTree* right;public: BinaryTree(T e, Bi原创 2018-01-18 16:34:29 · 140 阅读 · 0 评论 -
排序算法(插入排序、希尔排序、堆排序、归并排序)
插入排序插入排序由N-1次排序组成,对于i = 1到N-1趟,插入排序保证从0到i位置上的元素是已排序状态。 插入排序在第i次排序的时候,把第i个位置上的元素向左移动到[ 0 , i ]范围内的正确的位置上。算法实现/*插入排序将整个数组分为前后两部分,i(不包括i)之前的部分视为已排序部分,i及i之后的部分视为未排序部分;令temp = a[i],将a[i]暂时提取出原创 2018-01-30 17:34:25 · 323 阅读 · 0 评论 -
AVL树的旋转和插入
包含了AVL树的单旋转和双旋转的算法,以及AVL树的递归插入和非递归插入算法。单旋转也叫“一”字形旋转,又可分为左-左型旋转和右-右型旋转;双旋转也叫“之”字形旋转,又可分为左-右型旋转和右-左型旋转。#includeiostream>#includestack>using namespace std;class AVLNode{public: int element;原创 2018-01-16 18:16:02 · 355 阅读 · 0 评论 -
C++——const关键字和指针
给定声明 const char * const * pp; 下列操作或说明正确的是?A.pp++B.(*pp)++C.(**pp) = \\c\\;D.以上都不对const 限定一个对象为只读属性。 先从一级指针说起吧: (1)const char p 限定变量p为只读。这样如p=2这样的赋值操作就是错误的。 (2)const char *p p为一个指向char类型的指针转载 2017-09-06 14:13:21 · 191 阅读 · 0 评论 -
C++函数新特性——引用类型
引用变量引用是已定义的变量的别名,主要用途是用作函数的形参。通过将引用变量作为形参可以直接使用原始数据而不是新建一个副本。必须在声明引用变量的时候进行初始化int rat;int & rodent;rodent = rat; //不可以这样做!而应该这样int rat;int & rodent = rat; //正确!交换两个变量的值比较下面交换变量值的方法:include<iostream>原创 2017-09-06 13:59:42 · 527 阅读 · 0 评论 -
C++函数新特性——内联函数
内联函数内联函数的编译代码与其他程序代码“内联”起来,无需跳到其他代码块来执行代码。因此内联函数的执行速度更快,但会占用更多内存。使用方法① 在函数声明前加上关键字inline; ② 在函数定义前加上关键字inline; 通常将整个定义(函数头和函数体)放在一起。比如:#include<iostream>inline double square(double x){return x*x;}int原创 2017-09-04 10:50:24 · 302 阅读 · 0 评论 -
线程同步操作
线程同步,即在一个线程完成前,需要等待一个特定的事情发生,或者等待一个条件达成。在条件变量(condition_variable)和期望(future)中可实现线程同步的操作。condition_variable在condition_variable头文件中,包含了可以用于等待(wait)和通知(notify)系列函数。 等待函数 解释 wait() ...原创 2018-04-09 08:58:57 · 437 阅读 · 0 评论