- 博客(34)
- 资源 (23)
- 收藏
- 关注
转载 #define的基本用法
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1.1 #define的概念
2012-12-31 23:57:26 899
原创 c/c++ main 函数命令行参数的使用 知识小结
C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递。C/C++语言中的main函数,经常带有参数argc,argv,如下:int main(int argc, char** argv)int main(int
2012-12-31 10:29:49 31025 4
转载 在自己强大之前,不要奢望别人主动帮助你
[转帖] 近日,与一位老乡聊天,他是一位典型的“老凤凰男”,农村出身,家里只有他一人考进了名牌大学,剩下的两个兄弟和三个妹妹均在家中务农,目前人到中年,混到央企中层,处级待遇,对于一个毫无背景、无人指点的内向守旧型的“凤凰男”来说,也算是事业小成。酒过三巡之后,打开话匣子,他感叹自己的事业本不该如此,回首往事,总结出两大牵绊事业的要素:身后的大家族拖累和自己的悟性太低。对于正在混凝土浇筑的
2012-12-30 19:25:42 834
原创 直接选择排序 知识点小结
直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通
2012-12-30 18:21:15 999
原创 改进的两路归并排序算法
两路归并排序所需时间主要包括划分子序列的时间。以及两个子序列分别排序的时间和归并的时间。划分子序列的时间是一个常数,可以不考虑,最后的归并时间与元素的个数 n 线性相关, 因此,对于一个长度为n的元素序列进行归并排序的时间代价为:T(n)=cn+2T(n/2)。当元素的个数为1 时,函数直接返回,因此T(1)=1.与快速排序的时间复杂度相识,两路归并排序的时间复杂度也为O(nlogn)
2012-12-30 13:15:32 4182
原创 折半插入排序
折半插入排序(binary insertion sort)又称二分法插入分序,是对直接插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。 折半插入排序的基本思想是:设在数据表中有一个元素序列a[0],a[1],……,a[n-1]。其中
2012-12-29 22:05:12 2695 2
原创 直接插入排序
直接插入排序(straight insertion sort)的作法是: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。直接插入排序(Straight Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它
2012-12-29 21:20:03 849
原创 冒泡排序 知识点小结
冒泡排序,是指计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。冒
2012-12-29 20:32:37 1849
原创 归并排序 知识点小结
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有
2012-12-29 16:40:58 1217
原创 快速排序 知识点小结
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序(Quick Sort)是一种有效的排序算法。虽然算法在最坏的情况下运行时间为O(n^2)(当序列本身就处于有序状态时候就会出现这个情况)
2012-12-28 22:36:03 933
原创 希尔排序 知识点小结
希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2 该方法实质上是一种分组插入方法。代
2012-12-27 23:16:02 850
转载 STL中关于map和set的四个问题?
STL map和set的使用虽不复杂,但也有一些不易理解的地方,如:# 为何map和set的插入删除效率比用其他序列容器高?# 为何每次insert之后,以前保存的iterator不会失效?# 为何map和set不能像vector一样有个reserve函数来预分配数据?# 当数据元素增多时(10000到20000个比较),map和set的插入和搜索速度变化如何?
2012-12-26 19:32:24 3152 1
原创 STL 中map 和 set 的知识点总结
STL中的容器有顺序容器 (vector,list,deque),关联容器(map,set)还有一些其他容器。根据不同的场合选择不同的容器,会有意想不到的收获。Map是单词mapping(映射)的缩写Set是单词set(集合)的意思;Map和set内部的元素不可以重复,这一点不同于multimap和multiset。map 和 set使用相同的数据结构,
2012-12-26 19:06:06 8429
原创 C++中使用stl的set和hash_set
set的使用:#include#include#include#include#include//set_union()using namespace std;void main(){ string s1[3]={"aaa","bbb","ccc"}; string s2[3]={"bbb","ddd","eee"}; set sa(s1,s1+3);//申明一个se
2012-12-26 16:21:43 15763
转载 STL之set使用方法小结
/*set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)s
2012-12-26 15:07:08 722
原创 WSAAsyncSelect()
通知套接字端口有请求事件发生. #include int PASCAL FAR WSAAsyncSelect (SOCKET s,HWND hWnd, unsigned int wMsg,long lEvent); s 标识一个需要事件通知的套接口的描述符. hWnd 标识一个在网络事件发生时需要接收消息的窗口句柄. wMsg 在网络事件发生时要接收的消息.
2012-12-23 22:25:40 1126 1
原创 string char const char之间的转换
#include#include#includeusing namespace std;int main(int argc,char* argv[]) { char *x="123456"; cout<<"char x="<<"\""<<"123456"<<"\""<<endl; string s=x; char xp[sizeof(s)]; str
2012-12-22 23:30:49 728
原创 winsock获得ip地址的方法
实例代码如下:#include#include#include#define ServPort 5050#pragma comment(lib,"ws2_32.lib")using namespace std;void main(){ WSADATA wsaData; SOCKET sListen; PHOSTENT hostinfo; char
2012-12-22 23:22:55 5262
转载 STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
向量(vector) 连续存储的元素Vectorc;c.back() 传回最后一个数据,不检查这个数据是否存在。c.clear() 移除容器中所有数据。c.empty() 判断容器是否为空。c.front() 传回地一个数据。c.pop_back() 删除最后一个数据。c.push_back(elem) 在尾部加入一个数据。c[i] 等同于 c.at(i);
2012-12-21 20:33:28 800
原创 MFC编辑框自动换行,垂直滚动条自动下移
1.新建一个编辑框控件(Edit Control),将其多行(Multiline)前面打勾(属性设置为True),Auto HScroll前面的勾去掉(属性设置False),这样就可以实现每一行填满后自动换行了。2.再将垂直滚动条(Vetrical Scroll)前面打勾(属性设置为True),当输入或显示超过编辑框的大小后就会出现垂直滚动条。3.如果是输入,滚动条会自动移动跟随到
2012-12-19 00:39:40 22571 7
转载 九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)
引言 曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的。如今,又即将迈入求职高峰期--10月份,所以,也不免关注了网上和我个人建的算法群Algorithms1-12群内朋友发布和讨论的最新面试题。特此整理,以飨诸位。至于答案,望诸位共同讨论与思考。最新面试十三题 好久没有好好享受思考了。ok,任何人有任
2012-12-15 15:05:35 1048
转载 微软等数据结构+算法面试100题全部答案集锦
作者:July、阿财。时间:二零一一年十月十三日。引言 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试全部100题答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July (头像为手冢国光)的人在一个叫csdn的论坛上开帖分享微软等公
2012-12-15 15:02:37 19118
转载 精选微软等公司数据结构+算法面试100题带答案(41-60)
41、求固晶机的晶元查找程序。晶元盘由数目不详的大小一样的晶元组成,晶元并不一定全布满晶元盘,照相机每次这能匹配一个晶元,如匹配过,则拾取该晶元,若匹配不过,照相机则按测好的晶元间距移到下一个位置。求遍历晶元盘的算法 求思路。(不懂)42、两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5。另外只能输出结果,不能修改两个链表的数据。思路:只用输出结
2012-12-15 00:16:15 660
原创 Linux环境下C语言学习
#include#include#include#include #define MAX 1024 int main(int argc, char * argv[]){char buf[MAX];int in, out;int n; if(argc < 3){printf("arguments lack.\n");exit(1);} if((in = open(a
2012-12-09 15:16:36 1631
原创 system函数的用法
今天向同学请教问题的时候,又学习了一个功能很强大的函数的用法,system:1.system函数的用法,需要包含头文件#include这个函数跟他的参数没有任何关系,他的参数是字符串int system( const char *command );int _wsystem( const wchar_t *command );command: Command to be exe
2012-12-09 15:11:54 1913
翻译 使用U盘时的几个问题
一、存删文件,一次进行 当你在对U盘进行操作时,不管是存入文件或是删除文件,U盘都会对闪存中的数据刷新一次。也就是说,在U盘中每增加一个文件或减少一个文件,都会导致U盘自动重新刷新一次。在拷入多个文件时,文件拷入的顺序是一个一个的进行,此时U盘将会不断地被刷新,这样直接导致U盘物理介质的损耗。所以利用U盘保存文件时,最好用WinRAR等压缩工具将多个文件进行压缩,打包成一个文件之后再保存到U
2012-12-09 15:07:09 600
原创 表达式求值与后缀表达式
一个算术表达式,含有数字(为简化处理,数字只有一位),运算符:+、-、*,以及括号,求表达式的值。 给出的表达式是一般我们见到的中缀表达式,即运算符位于操作数之间。如果把中缀表达式转化为后缀表达式,那么对后缀表达式求值将会很方便。 后缀表达式特点: 1.操作符位于操作数之后; 2.没有括号; 3.运算符没有优先级。 中缀
2012-12-09 15:04:12 4889 1
原创 #pragma warning(disable 4786)
此warning产生的原因是因为标识符过长,超过了最大限定255个字类名超过了255个字,使用时就会报4786的waring。在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就超长了。解决方法有两种,一种是直接定义别名: #ifdef _DEBUG #define VeryLongClassNameA A
2012-12-09 15:00:14 2234
原创 随机数赋值,srand()放在循环体和循环体外的区别
这是一段由下面一段代码引发的血案:#include#include#include#define counter 1#define bool int#define true 1#define false 0int main(){ bool flag[100]; bool light=false; int count=0; int times=0; int
2012-12-06 16:48:35 3485
原创 用const和inline代替define
发现问题:编程的时候现在文件的头部定义了#define defaultsize 1000后来在main函数里面写for(int i=0;i后来查阅了相关资料把定义改为const int defaultsize 1000 错误就消失了! 解决问题:define的使用一般有几种情况:1. 用来定义常量,如 #define pi 3.1415926
2012-12-05 23:37:47 891
转载 C++ 中string.find() 函数的用法总结
#include #include using namespace std;void main(){ ////find函数返回类型 size_typestring s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i");string flag;string::size_type position;//find 函数 返回jk 在s 中的下
2012-12-05 15:36:38 1461
翻译 for_each
for_each第一个参数和第二个参数是指定范围的,如果是容器,那么就那么写,如果是数组,就写指针,第三个参数的调用函数的名字,就是说对于第一个参数和第二个参数指定范围之中的每一个元素都会带入到第三个参数指定的函数中去。#include #include #include using namespace std; void show(int number) //将排序后的数
2012-12-03 20:28:55 602
原创 vector::erase()方法的详细介绍及问题解答
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素vector::erase()方法有两种重载形式如下:iterator erase( iterator _Where);1.iterator erase( iterator _First, iterator _Last);如果是删除指定位置的元素时:返回值是一个迭代
2012-12-02 22:37:18 520
原创 STL vector erase 笔试 曼恒数字
其实vector的erase问题我以前自个写代码时就有遇到过,囧,只是又忘记了。去曼恒数字面试时有一道笔试题大概是这样子的,问下面的程序运行后会有什么问题:[cpp] view plaincopyvector int> a; a.push_back(1); a.push_back(2); a.push_back(4); a.push_back(3);
2012-12-02 22:11:14 767
敏感词统计与过滤系统
2012-08-30
计算机科学概论-中文版
2012-08-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人