稻草阳光
首先,我写了一个构造函数用virtual修饰的类A,代码如下:class A { public: virtual A() {} };运行结果:(我是在VS下运行的)可以看出这样的代码编译时是有问题的。为什么构造函数不能是虚函数呢?这里你需要知道一个概念,那就是虚函数表vtbl,每一个拥有虚成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的虚函数地址来调用虚函数
今天写了第一个Python代码,很费神,由于空格对齐不对,怎么都运行不出来,不过很激动的是最终在我努力之下,有了结果。还有很感谢大神带我学习了第一个Python项目。 先看代码:#!/usr/bin/python #if__name__ = "__main__" #prin
单片机中C语言的程序与数据存储 一、五大内存分区:内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。1、栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。2、堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应
关于C++读取数量不定的输入数据#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> int main() { int sum = 0, value = 0; // 读取数据直到遇到文件尾,计算所有读入的值的和&
自己在网上搜在Linux下安装mysql的方法,开始不知道C语言安装mysql和其他的不一样,就一直照着安装,结果。。。,郁闷的装了几天,下来,介绍一下我安装sql的过程:(看图)下来,我是按照别人的博客做的:链接:http://my.oschina.net/hanzhankang/blog/201466 具体内容是这样的:ervice mysql start出错,mysql启动不了,解决mysq
计数排序 计数排序算法不是一个基于比较的排序算法,而且一种稳定的排序算法。 计数排序该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序
第一题://判断二叉树是否为完全二叉树,完全二叉树的定义为,前n-1层都是满的,第n层如有空缺, //则是缺在右边即,第n层的最右边的节点,它的左边是满的,右边是空的 //方法一: //这个问题的描述已经提示了解法,采用广度优先遍历,从根节点开始,入队列,如果队列不为空, //循环,遇到第一个没有左儿子,或者右儿子的节点设置标志位,如果之后在遇到有左或者右儿子的 //节点那么,这不是一颗完全二叉
将C语言注释转换成C++注释#pragma once #pragma warning (disable:4996) typedef enum ConvertState { SUCCESS,//转换成功 FILE_ERROR,//打开文件失败 NO_MATCH,//转换失败 } ConvertState; //转换的状态 typ
出现智能指针的原因 用智能指针,把申请内存的工作都在接口内部实现并加以限制,把释放内存的工作交给智能指针。常见的智能指针 1.你知道智能指针吗?智能指针的原理。 2.常用的智能指针。 3.智能指针的实现。 1答案:智能指针是一个类,这个类的构造函
线索化二叉树将二叉树变为线索二叉树的过程称为线索化。按某种次序将二叉树线索化的实质是:按该次序遍历二叉树,在遍历过程中用线索取代空指针。代码:#pragma once enum PointTag{ LINK, THREAD, }; template<class T> struct BinaryTreeNode{ T _data;
Linux安装telnet安装环境:CentOS 6.4 一、安装telnet1、检测telnet-server的rpm包是否安装 [root@localhost ~]# rpm -qa telnet-server 若无输入内容,则表示没有安装。出于安全考虑telnet-server.rpm是默认没有安装的,而telnet的客户端是标配。即下面的软件是默认安装的。2、
单向管道通信实现方式原理: 在计算机编程里,命名管道是一种从一个进程到另一个进程用内核对象来进行信息传输。和一般的管道不同,命名管道可以被不同进程以不同的方式方法调用(可以跨权限、跨语言、跨平台)。只要程序知道命名管道的名字,发送到命名管道里的信息可以被一切拥有指定授权的程序读取,但对不具有制定授权的。命名管道是一种FIFO(先进先出,First-In First-Out
无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。消息队列( messa
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:死锁的4个必要条件:(1)互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。(2
管道的内部组织方式 在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。 有两个 file 数据结构,但它们定义文件操作例程地址是不同的,其中一个是向管道中写入数据的例程地址,而另一个是从管道中读出数据的例程地址。
文件压缩 通过某种特殊的编码方式将数据信息中存在的重复度、冗余度有效地降低,从而达到数据压缩的目的。这里用的是哈夫曼树产生特殊编码。//compress.h #pragma once typedef unsigned long long longType; struct CharInfo { unsigned&
常见C语言的文件读写方式fopen("*.*","r") fopen("*.*","r+") fopen("*.*","rb") fopen("*.*","rb+") fopen("*.*","w") fopen("*.*","w+") fopen("*.*","wb") fopen("*.*","wb+") fopen("*.*","a") fopen("*.*","a+") fopen
什么是布隆过滤器布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。实现思想 如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等
输入n个数,请将其中的偶数的二进制反转。eg:输入1 6 5其中6是偶数,二进制表示为110,反转后为011,代表3,所以最终输出1 3 5.#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<assert.h> void
位图算法 位图法就是bitmap的缩写,所谓bitmap,是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。应用 1.给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 解决方法:申请512M的内存一个bit位代表一个unsigned int值读入
定义 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。应用 若某个朋友圈过于庞大,要判断两个人是否是在一个朋友圈,确实还很不容易,给出某个朋友关系图,求任意给出的两个人是否在一个朋友圈。 规定:x和y是朋友,y和z是朋友,那么x和z在一个朋友圈。如果x,y是朋友,那么x的朋友都与y的在一个朋友圈,y的朋
几种常见的排序算法之比较 排序的基本概念以及其算法的种类,介绍几种常见的排序算法的算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序的算法和分析它们各自的复杂度,然后以表格的形式,清晰直观的表现出它们的复杂度的不同。在研究学习了之前几种排序算法的基础上,讨论发现一种新的排序算法,并通过了进一步的探索,找到了新的排序算法较之前几种算法的优势与不足。 排序算法,是
什么是进程调度以及为什么有进程调度算法 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。常见的进程调度算法 先进先出算法 算法总是把处理机分配给最先进入就绪队列的进程,一个进程
引用是什么?引用其实就是给变量起的一个别名,使用这个别名跟使用变量名没有区别。那什么又是变量名呢?变量名实质上是一段连续存储空间的别名,是一个标号(门牌号),编译器通过变量来申请并命名内存空间,程序员可以通过变量的名字可以使用存储空间。也可以这样理解,变量名是逻辑概念,变量是物理层面,变量含数据类型和数据值,数据类型决定内存的分配,编译器将变量名和变量对应的内存联系起来,使程序员可以通过变量名来操
说到哈希冲突,就必须谈到哈希函数了。什么时候哈希函数 哈希冲突函数hv(i),用于在元素i发生哈希冲突时,将其映射至另一个内存位置。什么是哈希冲突 哈希冲突即关键字不同的元素被映射到了同一个内存位置,包括由同义词冲突和非同义词冲突。 处理哈希冲突的方法很多,这里浅谈一下处理哈希冲突的闭散列方法:线性
进度条的作用 进度条即计算机在处理文件时,实时的,以图片形式显示处理文件的速度,完成度,剩余未完成文件的大小,和可能需要处理时间,一般以长方形条状显示,当进度条读完之后即可进入下一步,主要为了方便用户耐心的等待和确切的了解进度。Linux下进度条的实现1.建立主函数(vim main.c)2.建立Proc.c(实现进度条)注释:bar[]用来表示进度,rate%可以更具体的了解程序进度
什么是PCB 为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。PCB一般都包含什么 1
安装g++,gdb,ctags以及对vim的配置的目的: g++,gdb,ctags可以方便我们在Linux下编译程序,调试程序;对vim进行配置的目的: 进行vim配置,可以让我们在后续敲代码更加方便。按F5可以直接编译并执行C、C++代码以及执行shell脚本;按“F8”可进行C、C++代码的调试;“Ctrl + A”为全选并复制快捷键,方便复
选择排序1.选择排序//堆排序,向下调整子函数void AdjustDown(int *a, size_t size, size_t root){ size_t parent = root; size_t child = parent * 2 + 1; while (child < size) { //选择孩子节点中较大的节点,与父亲节点交换 if (child + 1 < siz
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号