C++
文章平均质量分 53
路漫远吾求索
电子,无线局域网
展开
-
字梯游戏求解
问题描述 在字梯游戏中,每一个词都是通过将字梯中的前一个词改变一个字母形成的。例如,我们可以通过一系列的单字母替换将zero转换成five:zero, hero, here, hire, fire, five。 这是一个无权最短路径问题,其中每个词是一个顶点,如果两个顶点可以通过一个字母的替换相互转化的话,在这两个顶点之间就有一条(双向)边。代码//字梯游戏//#inc原创 2016-10-12 13:14:29 · 766 阅读 · 0 评论 -
修改字符串以及string 与char* char[]之间的转换
初始化字符指针为字符串和字符数组字符串注意char *a=”abcdef”与char a[]=”abcdef”的区别: 1、字符串存放的内存区域不同:前者存放在常量区,不可修改,后则存放在栈中,可以修改;2、变量a存放的内容不同:前者存放的是一个地址,而后者存放的是字符串”abcdef”,因此使用sizeof它们的结果是不同的,分别是4和7搜索;string 与char* char[]之间的转换s原创 2017-04-07 10:45:03 · 1145 阅读 · 2 评论 -
string的用法以及cin用法
stringstring s=”aannccnc”;a.size()//求长度int pos1=s.find("nc");//返回第一次出现an的位置3int pos2=s.find("nc",5);//从s[5]开始查找nc,返回6if(s.find("ac") != s.npos)//查找s中是否有ac字符串,有的话,进入if语句里,没有跳出{}//删除用法(1)erase(pos,原创 2017-04-07 14:05:22 · 3564 阅读 · 1 评论 -
C++之析构函数与虚函数
一个例子class Base { public: Base() { } ~Base() { cout << "Base 析构" << endl; } }; class Derived :public Base { public: int a; Derived() { }; ~Der原创 2017-03-12 21:56:34 · 1373 阅读 · 0 评论 -
Typedef用法
先看一个例子typedef void (*funcptr)(void) 什么意思这里是定义了一个指向参数为空,返回值为空的函数的指针类型。定义一个函数指针类型。 比如你有三个函数: void hello(void) { printf(“你好!”); } void bye(void) { printf(“再见!”); } void ok(void) { printf(“好的!”); } ty原创 2017-03-12 21:59:20 · 452 阅读 · 0 评论 -
指针作为形参进行传递注意事项
一个例子参考:http://blog.csdn.net/sszgg2006/article/details/9037675#include<iostream>using namespace std;int m_value = 1;void func(int *p){ p = &m_value;}int main(int argc, char *argv[]){ int n原创 2017-03-13 17:22:39 · 1849 阅读 · 0 评论 -
二叉搜索树
概念介绍http://www.cnblogs.com/QG-whz/p/4536875.html?utm_source=tuicool&utm_medium=referral(包含C++具体实现,待研究)简单实现和测试#pragma once#include<iostream>using namespace std;struct Node{ int data; Node*Lc原创 2017-03-13 15:50:07 · 382 阅读 · 0 评论 -
引用
左值与右值一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。 int i = 5; int &a = i; 这时编译通过 但是如果 int &a = 5;这样就出错了 这个5和i有什么区别,答案就是5是右值,i是左值,为什么,参考上面的话。 你用一个函数的返回值给非常量引用初始化 那么函数的返回值是啥呢 在函数返回的时候,系统将返回值存放至eax寄原创 2017-04-10 00:19:49 · 386 阅读 · 0 评论 -
B 树以及B+树和B*树
对B树概念介绍B树说白了就是一个结点有多个子结点。 本文介绍的数据结构英文是B-tree,中文写作B-树,其中 – 并不是减号,而是连接符,读作B树。B-树是一种平衡搜索树,但它的每个结点包含的元素可以多于2个,因此并不是严格意义上的二叉树。 相比与二叉树,B树显得更矮,更胖。它的每个结点包含多个数据,这特别适合于对外存的访问。由于硬盘等设备访问速度和内存相比非常慢,而从硬盘读取1个数据和读取1原创 2017-04-11 00:23:35 · 406 阅读 · 0 评论 -
进程,线程,同步,异步,内存管理小结
循环int BinSearch(int a[], int n, int key){ int low = 0, high = n - 1, mid; while (low <= high) { if (a[low] == key) return low; if (a[high] == key) r原创 2017-03-25 23:18:08 · 517 阅读 · 0 评论 -
面试小结2
面试小结TX 1. 链表反转 2. 最大公共子串(两种方法,动态规划那种) 3. 进程与线程区别 4. 为何转后台 5. 栈空间的最大值是多少最大公共子串:int LCS(char s1[], char s2[]){ int len1 = strlen(s1); int len2 = strlen(s2); int **c = new int *[len1 +原创 2017-04-18 12:27:55 · 388 阅读 · 0 评论 -
Python与C++区别
程序有两种执行方式,解释执行和编译执行。 PYTHON是一种脚本语言,是解释执行的,不需要经过编译,所以很方便快捷,且能够很好地跨平台,写一些小工具小程序特别合适。 而C++则是一种需要编译后运行语言,在特定的机器上编译后在特定的机上运行,运行效率高,安全稳定。但编译后的程序一般是不跨平台的。 学习一种编程语言不能看它热不热。而是要看它在某个领域的作用。就像汇编,虽然现在不热了,但是它在某些行原创 2017-04-15 00:12:35 · 29927 阅读 · 0 评论 -
数组初始化是在编译器还是在运行期?
int a[3]={1,2,3};//这段代码是在编译阶段还是运行阶段初始化的呢//如下的呢 void test(int i) { int a[3]={i,i,i}; //这个i是不确定的,这个肯定是运行阶段完成的把 }数组的长度是在编译时确定,这样就能为它分配内寸,但是不会初始化. 长度编译确定,初始化在运行时确定。 如果加上const,则其值在编译期就确定了。 const i原创 2017-04-19 20:43:07 · 2397 阅读 · 1 评论 -
链表排序
插入排序//需要注意的是传入的是二级指针,这样才会对链表内容进行修改。#pragma once#include<iostream>using namespace std;struct Node{ int data; Node *next; Node(int x) { data = x;next = NULL; }};void insert_operation(No原创 2017-04-16 00:21:35 · 529 阅读 · 0 评论 -
待看
C++联合体以及大小端 http://www.cnblogs.com/ziwuge/archive/2010/12/27/1917765.html http://blog.csdn.net/infoworld/article/details/42131387 http://blog.csdn.net/kuai0705/article/details/20841133C++单例模式 http:原创 2017-04-16 01:26:09 · 381 阅读 · 0 评论 -
已知中序遍历和前序遍历,求后序遍历
已知中序遍历和前序遍历,求后序遍历思路前序遍历:根 左 右 中序遍历:左 根 右 寻找根,然后对于中序遍历,根的左半部分和前序遍历的根后面的左那部分 又重新构成一个相同的子问题,递归求解即可。Code#pragma once#include<iostream>#include<stack>#include<queue>using namespace std;typedef struct原创 2017-04-20 20:49:49 · 861 阅读 · 0 评论 -
C++无法被继承的类实现以及单例模式的类的实现
无法被继承的类的实现思路构造函数是类的私有成员函数,同时在共有成员函数里,声明创建该类的实例的函数。以及释放该类的析构函数。范例#include<iostream>using namespace std;class A{public: static A * Construct(int n) { A *pa = new A; pa->num =原创 2017-05-04 01:32:50 · 3699 阅读 · 0 评论 -
Assert()
Assert()这是实现方法的代码: #define ASSERT(exp) (void)((exp)||(_assert(#exp,FILE,LINE),0)) void _assert(void * exp, void * file, unsigned int line) { printf(“Assertion failed: %s, file %s, line %d\n”,exp,f原创 2017-04-19 23:32:54 · 1870 阅读 · 0 评论 -
sizeof()来求一个类的大小
基本概念一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小.首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所原创 2017-03-12 16:07:05 · 5842 阅读 · 1 评论 -
memset
让一个数组初始化一个指定值 0就好办了,99我只会循环赋值了 //若是字符数组可以用memset,int型就循环赋值吧 char num[30] = {0}; memset(num, ‘a’, sizeof(num)); memset皆是放屁. memset按字节赋值,而数组类型是int占4字节,4个字节都是99的int能打印出99么? memset只能用-1或者0来赋值因为-原创 2017-02-09 17:01:02 · 381 阅读 · 0 评论 -
Kosaraju 算法求解一个有向图的强连通分支个数
基本介绍网上看了很多关于求解一个有向图的强连通分支个数的算法,其中最著名的莫过于: Kosaraju 算法看的比较晕!过程如下: 1。 创建一个空的栈 S,并做一次 DFS 遍历。在 DFS 遍历中,当在递归调用 DSF 访问邻接顶点时,将当前顶点压入栈中; 2。 置换图(Transpose Graph); 3。 从栈 S 中逐个弹出顶点 v,以 v 为源点进行 DFS 遍历。从 v 开始原创 2016-11-02 21:53:45 · 4123 阅读 · 1 评论 -
二维数组的传递方式
二维数组的传递方式如何将二维数组作为函数的参数传递刚刚在写代码时,遇到把二维数组作为参数传递,写的时候遇到一点小问题,后来上网查了一下,发现下面这篇好的解析:转载以记之。正文:首先,我引用了谭浩强先生编著的《C程序设计》上面的一节原文,它简要介绍了如何将二维数组作为参数传递,原文如下(略有改变,请原谅):[原文开始]可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大转载 2016-10-24 19:46:17 · 1114 阅读 · 0 评论 -
解决DEV C++编译时出现的“ undefined reference to `___dyn_tls_init_callback'...”问题
问题描述这两天我发现一个比较好用的编译器,DEV,下载安装完之后,编译,发现会报以下错误。D:\software\Eclipse\1\eclipse\MinGW\lib\crt2.o In function `__mingw_CRTStartup':193 C:\MinGW\msys\1.0\src\mingw\crt1.c undefined reference to `___dyn原创 2016-10-24 22:43:23 · 7474 阅读 · 0 评论 -
拓扑排序
拓扑排序目录拓扑排序目录拓扑排序概念应用场景两个相应的实现以及测试分析与总结最近在看图论算法,准备后面每天更新一个自己看的算法以及相应实现:拓扑排序概念应用场景两个相应的实现以及测试分析与总结拓扑排序概念 是对有向无环图的顶点的一种排序,它使得如果存在一条从v_i到v_j的路径。那么在排序中v_j出现在v_i后面。 算法思想:先在图中找一个没有入度的顶点,显示该顶点,并把它和它连原创 2016-10-01 01:25:13 · 813 阅读 · 0 评论 -
Prim和Kruskal算法之C++实现
最近好长时间都困惑在这两个算法中,其实也不难,就是写的时候比较费劲。现在总结一下。 首先说一下两个算法是干嘛呢? 都是求解一个无向图G的最小生成树(minimum spanning tree),就是由该图的那些连接G的所有顶点的边构成的树,其总值最低。这里很重要一点就是要求G是连通的。 克鲁斯卡尔(Kruskal)算法因为只与边相关,则适合求稀疏图的最小生成树。而prime算法因为只与顶点有关原创 2016-10-26 23:27:09 · 4404 阅读 · 0 评论 -
有向无权图最短路径问题——BFS求解
解释 图1如图1所示,这是一个有向无权图,如果选中某个定点作为起始顶点s,我们要找出s到其他所有顶点的最短路径问题。由于是无权的,所以我们只关心最短路径所包含的边数。这就是一个有向无权图求最短路径的问题,用到BFS算法,广义优先搜索算法。流程解析设s为选中的v3。原创 2016-10-02 23:16:22 · 8318 阅读 · 0 评论 -
Tarjan算法求解一个无向图中的割点和桥问题
基本概念割点:Articulation Point 在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点(Articulation Point)。 双连通的图:一个没有关节点的连通图称为重连通图(biconnected graph)(双连通图)。 连通度:k,若在连通图上至少删去k 个顶点才能破坏图的连通性。算法应用算法应用原创 2016-10-27 13:29:46 · 5031 阅读 · 3 评论 -
关于程序的运算时间复杂度的一点思考
时间复杂度一般考察算法的复杂度,我们常用到时间复杂度,和空间复杂度来定义。其中时间,其实就是计算机执行这个算法执行的指令次数,是一个计算量的概念;而空间复杂度是指执行这个算法所需的内存空间,即寄存器的资源。 这篇博客主要探讨一下自己关于时间复杂度的一些思考。几个例子 对比上述四个例子,可以发现,程序的时间复杂度和基本操作被执行的次数有关。这里很重要的一点是:基本操作。其实for循环,原创 2016-10-07 18:44:43 · 990 阅读 · 0 评论 -
linux下错误的捕获:errno和strerror的使用
linux下错误的捕获:errno和strerror的使用 经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。 在程序代码中包含 #includeinclude include include ifnde转载 2016-10-08 14:34:21 · 21600 阅读 · 0 评论 -
并查集
太有意思了! 转载:http://blog.csdn.net/dellaserss/article/details/7724401/ 请看!讲了并查集和路径压缩算法!并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?) 来看一个实例,杭电1232畅转载 2016-10-31 22:13:31 · 929 阅读 · 0 评论 -
二维数组的传递方式
如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间。正文: 首先,我引用了谭浩强先生编著的《C程序设计》上面的一节原文,它简要介绍了如何将二维数组作为参数传递,原文如下(略有改变,请原谅)转载 2016-11-02 16:44:53 · 808 阅读 · 0 评论 -
C++内存结构体联合体所占内存
先明白下面几个事:32位操作系统和VS32位编译器有区别么?待解答32位操作系统中: int 4字节 char 1字节 long 4字节 long long 8字节64位操作系统中: int 4字节 char 1字节 long 8字节(为啥验证是4呢,待解答) long long 8字节看struct//64位操作系统struct name1 { char a;原创 2017-01-02 00:26:59 · 1768 阅读 · 0 评论 -
指针和引用作为形参传递下去的区别
int n; int &m = n; 在C++中,多了一个C语言没有的引用声明符&,如上,m就是n的引用,简单的说m就是n的别名,两者在内存中占同样的位置,不对m开辟新的内存空间,对m的任何操作,对n来说是一样的。 对于引用,有以下三条规则: (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 (2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NUL转载 2016-12-31 22:07:52 · 812 阅读 · 0 评论 -
C++编译错误,连接错误,运行错误
摘自别人:(1) 编译错误:就是编译器无法进行继续编译的错误,最基本的就是语法错误了,比如语句后面少了;或者 } 不匹配之类的,选择题一般是这样。编译错误可以由编译器检查出来。(2) 运行时错误:分为两类:1. 由于考虑不周或者输入错误导致程序异常,比如数组越界访问,除数为0,堆栈溢出等。 2,由于程序设计思路的错误导致程序异常或难以得到预期结果。编译器对运行时错误无能为力,查错和纠错完全由用户自己原创 2017-01-01 20:28:56 · 1330 阅读 · 0 评论 -
C++ 函数
isdigit(char c):判断字符c是否是个数字原创 2017-02-09 16:46:31 · 211 阅读 · 0 评论 -
数组
vector *str_lists; vector headers[] = { { ‘1’,’3’,’2’,’4’ },{ ‘2’ },{ ‘3’,’2’,’4’ },{‘4’,’5’} };vector *str_lists; vector headers[] = { { “1”,”4”,”2”,”3” },{ “2” },{ “3”,”5”,”2” },{“4”,”5”},{ “5” },{原创 2017-02-09 16:51:59 · 195 阅读 · 0 评论 -
结构体
取结构体里的数据有两个符号 有”.”和”->”两种,请问这两种有什么区别; ->叫做指向操作符,凡是结构体指针变量均采用这样的操作符来取成员。如下列子: struct point { int x; int y; };point pt; pt.x=1; pt.y=2;但同时,这样也行: point pt; point* ppt=&pt; ppt->x=1; ppt->y=2;原创 2017-02-09 16:52:33 · 183 阅读 · 0 评论 -
C++四种基本类型转换
http://www.cnblogs.com/carsonzhu/p/5251012.html http://hb.qq.com/a/20110722/001452.htm转载 2017-05-25 22:17:03 · 382 阅读 · 0 评论