代码改变世界

随笔分类 -  C++相关

C++ 之虚函数的实现原理

2019-02-06 11:21 by itwolf, 3466 阅读, 收藏, 编辑
摘要: c++的多态使用虚函数实现,通过“晚绑定”,使程序在运行的时候,根据对象的类型去执行对应的虚函数。 C++ 之虚函数的实现原理 带有虚函数的类,编译器会为其额外分配一个虚函数表,里面记录的使虚函数的地址,当此类被继承时,子类如果也写了虚函数就在子类的虚函数表中将父类的函数地址覆盖,否则继承父类的虚函 阅读全文

带有头结点的链表的基本操作

2016-09-04 16:22 by itwolf, 2941 阅读, 收藏, 编辑
摘要: #ifndef _LIST_h_ #define _LIST_h_ //链表中的数据结构 typedef struct Link_data { int a; int b; }Node_data; //链表节点结构 typedef struct Link_node { Node_data data; struct Link_node *pNe... 阅读全文

source insigt、pc-lint、VS联合使用

2016-03-15 21:33 by itwolf, 2469 阅读, 收藏, 编辑
摘要: 前言:     近几天参加公司培训,公司要求,开发的时候使用source insight、PC-lint和VC来编程和调试,这不用不知道,一用吓一跳,这套工具一组合简直爽的根本停不下来。 先说一下各自的作用,source insight主要用于编辑和浏览代码,编写代码的时候它有大量的提示,就像使用了 阅读全文

C++ STL之priority_queue

2016-01-26 20:05 by itwolf, 404 阅读, 收藏, 编辑
摘要: STL中的priority_queue(优先队列)是一种会按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序的容器,不同优先级的情况下,top()上永远是最高优先级的数据,其底层采用的是堆结构(默认大顶堆)。注意相同优先级下并没有先进先出,后面的例子中可以看到 头文件#inclu... 阅读全文

谈谈map中的count方法

2016-01-20 22:09 by itwolf, 24696 阅读, 收藏, 编辑
摘要: map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,因此count()的结果只能为0和1,可以以此来判断键值元素是否存在(当然也可以使用find()方法判断键值是否存在)。拿map举例,find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向en... 阅读全文

注意map<> 的[]

2016-01-18 20:10 by itwolf, 297 阅读, 收藏, 编辑
摘要: 其实在之前一篇关于map的基本操作中已经提到过注意[]操作,这里再强调一下。先看下面的程序:#include#includeusing namespace std;int main(){ mapnums; nums[6]++; nums[3]+=5; if(0==nums[4... 阅读全文

文件重定向函数freopen

2016-01-18 19:43 by itwolf, 779 阅读, 收藏, 编辑
摘要: 头文件:stdio.hFILE *freopen( const char *filename, const char *mode, FILE *stream );参数说明:filename:需要重定向到的文件名或文件路径。mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“... 阅读全文

多维数组的理解

2016-01-14 13:09 by itwolf, 4972 阅读, 收藏, 编辑
摘要: 要清楚的理解多维数组,需要先理解指针的算术运算和数组名的含义。1、指针的算术运算 指针的算术运算与普通的类型的算术运算是不同的,编译器会在指针的算术运算的过程中自动乘以sizeof(type),如int p=1;p=p+2;则p=3;而int *p; (假如p指向的初始地址位2000),那么p=p... 阅读全文

大整数相加和大整数相乘

2015-12-18 09:56 by itwolf, 669 阅读, 收藏, 编辑
摘要: 大数问题是指操作数超过了计算机常用数据类型的存储范围,常常是用字符串来模仿整数相加和相乘运算来实现的,在模拟的过程中要注意考虑进位和边界条件。1、大整数相加先看一下加法的计算过程,如456+56789 45656789---------57245 计算过程是从低位往高位开始计算,计算过程要加上进位... 阅读全文

谈谈 char *num="123";和char num[4]="123";的区别

2015-12-17 21:02 by itwolf, 895 阅读, 收藏, 编辑
摘要: 最近写程序的时候发现这样一个问题#include#include using namespace std;void reverse(char *str){ int len=strlen(str); char *p=str; char *q=str+len-1; while(p... 阅读全文

C++ 字符串分割

2015-09-16 15:37 by itwolf, 369 阅读, 收藏, 编辑
摘要: java和C#中字符串都可以使用split进行分割,但是C++中却没有这个方法,之前总是自己写一个函数自己进行分割,倒也不麻烦,今天在网上找了类似的函数,发现strtoc()似乎可以完成字符串的分割功能。原型:char *strtok(char s[], const char *delim);用... 阅读全文

迷宫问题(bfs的应用)

2015-09-11 22:30 by itwolf, 635 阅读, 收藏, 编辑
摘要: 问题描述:定义一个二维数组N*M(其中2#include#includeusing namespace std;//定义坐标struct point{ int x; int y;};int mn[11][11];//记录迷宫状态:0可以访问,1不能访问,-1已经访问过point pre[... 阅读全文

new int[]和new int()的区别

2015-09-10 21:00 by itwolf, 4556 阅读, 收藏, 编辑
摘要: 1. new int[] 是创建一个int型数组,数组大小是在[]中指定,例如:int * p = new int[10]; //p执行一个长度为10的int数组。2. new int()是创建一个int型数,并且用()括号中的数据进行初始化,例如:int *p = new int(10); // ... 阅读全文

string.length()与-1比较为什么会出现匪夷所思的结果

2015-09-09 20:52 by itwolf, 841 阅读, 收藏, 编辑
摘要: 今天调试程序发现了个匪夷所思的事情,-1与string.length()比较永远是-1大,看下面代码#include#includeusing namespace std;int main(){ string str; str="123"; int num=-1; //int... 阅读全文

oj放苹果

2015-09-07 22:05 by itwolf, 563 阅读, 收藏, 编辑
摘要: 题目描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1是同一种分法。输入每个用例包含二个整数M和N。0=n,那么再分两种情况讨论:1)所有盘子上面都有苹果,那么从每个盘子上都拿走一个苹果对结果没有影响,或者理解为放苹果的时候先在... 阅读全文

最长单调递增子序列

2015-09-06 16:49 by itwolf, 409 阅读, 收藏, 编辑
摘要: 动态规划问题:令dp[i]表示:在str[0-i]中,当以str[i]为单调递增子序列最后一个元素时,所得最长单调递增子序列的长度。递推式:dp[0]=1(第一个字符自己也为递增序列 )当0#includeusing namespace std;int main(){ int n; c... 阅读全文

图的遍历算法

2015-09-06 14:44 by itwolf, 549 阅读, 收藏, 编辑
摘要: 前言:学习图的遍历算法之前,需要先了解一下图的存储方式(这里只以无向图作为讨论了)。(1)邻接矩阵(2)邻接表一、DFS(深度优先遍历)设置一个visited数组防止重复遍历,DFS主要利用的是栈结构邻接矩阵的遍历#includeusing namespace std;const int n=4;/... 阅读全文

01背包及其变种(物品无限背包、恰好装满背包)

2015-09-03 10:26 by itwolf, 2542 阅读, 收藏, 编辑
摘要: 一、01背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解将那些物品装入背包可使总价值最大。 动态规划: 1) 子问题定义:F[i][j]表示前i件物品中选取若干件物品放入剩余空间为j的背包中所能得到的最大... 阅读全文

int string相互转换

2015-09-02 21:03 by itwolf, 228 阅读, 收藏, 编辑
摘要: 一、itoa()和atoi()注意:这两个函数并不是标准的C函数,而是windows环境下特有的函数。1、itoa#include#includeusing namespace std;int main(){ int num=12345; string str; char s[30... 阅读全文

链表的相关操作

2015-08-25 14:32 by itwolf, 233 阅读, 收藏, 编辑
摘要: #includeusing namespace std;struct node{ int data; node *next;};//链表的建立,创建有n个结点的链表node *create(int n){ node *head=NULL; node *p=NULL; h... 阅读全文
点击右上角即可分享
微信分享提示