C/C++
文章平均质量分 72
逆風的薔薇
这个作者很懒,什么都没留下…
展开
-
c++解决棋盘覆盖问题
#include #include #define Board_size 4//该棋盘矩阵的维度 using namespace std; int Board[Board_size][Board_size];//声明该棋盘矩阵 void ChessBoard(int tr,int tc,int dr,int dc,int size) //tr,tc为最左上角的坐标,原创 2012-11-01 22:05:07 · 1715 阅读 · 0 评论 -
C++基础知识易错点总结(2)
1. 若一组待排数据有序,花费时间最多的是:快速排序,T(n)=O(n^2);2. 有 1000 个无序的整数,希望使用最快的方式找出前 50 个最大的,最佳的选择是?快速排序:在最理想的情况下,即划分可以使得每次分到n/2 的两个序列,复杂度为o(nlogn);堆排序:无论什么情况都是o(nlogn),当然还有建堆的时间o(n),所以为n+nlogn,但是,本题只是要前五十个,所以堆原创 2016-02-29 11:39:41 · 877 阅读 · 0 评论 -
C/C++编程之内存管理
内存分配方式内存分配方式一共有三种:(1)从静态存储区域分配;内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,例如,全局变量,静态变量。(2)在栈上创建;在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)在堆上分配,亦称动态内存原创 2015-01-29 15:38:42 · 1834 阅读 · 0 评论 -
Minimum Window Substring 最小覆盖子串算法
题目 最小子串覆盖 描述 笔记 数据 评测给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串。您在真实的面试中是否遇到过这个题? Yes 注意事项如果在source中没有这样的子串,返回"",如果有多个这样的子串,返回起原创 2016-04-12 16:13:57 · 6220 阅读 · 0 评论 -
N皇后问题的递归与非递归解法
题目 N皇后问题n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。样例对于4皇后问题存在两种解决的方案:[ [".Q..", // Soluti原创 2016-04-12 17:05:55 · 7885 阅读 · 0 评论 -
字符串转换为整数
题目 转换字符串到整数实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。样例"10" =>10"-1" => -1"123123123123123" =>原创 2016-04-13 17:31:43 · 3270 阅读 · 0 评论 -
最长公共子序列
题目给定两个字符串str1和str2,返回两个字符串的最长公共子序列。举例:str1="1A2C3D4B56",str2="B1D23CA45B6A"“123456”和"12C4B6"都是最长公共子序列,返回哪一个都行。分析经典动态规划,求解二维动态规划表。假设str1的长度为m,str2的长度为n,声明大小为m*n的矩阵dp,行数为m,列数为n。dp[i][j]的含义是s原创 2016-05-09 21:39:06 · 1403 阅读 · 0 评论 -
最长公共子串
题目给定两个字符串str1和str2,返回两个字符串的最长公共子串。举例:str1=“1AB2345CD”,str2="12345EF",返回“2345”分析典型的动态规划问题。假设str1的长度为m,str2的长度为n。方法一:时间复杂度O(mn),空间复杂度O(mn)声明大小为m*n的矩阵dp,求解二维动态规划表,行数为m,列数为n。dp[i][j]的含义是必须把s原创 2016-05-09 22:13:12 · 1706 阅读 · 0 评论 -
C++编程之内存管理(再谈)
1.内存分配方式在 常见的内存错误及其对策 C++中,内存分成 5 个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程转载 2016-07-31 11:00:39 · 608 阅读 · 0 评论 -
STL深入探究(一、空间配置器)
序STL 是 Standard Template Library(标准模板库)的缩写。Standard 是指STL是C++标准程序库的一部分,Template是指STL是一套模板,这也是STL最本质的特征。标准模板库使得C++编程语言在有了同Java一样强大的类库的同时,保有了更大的可扩展性。2. STL六大组件2.1空间配置器(Memory Allocation)负责空间配置原创 2016-08-02 11:34:15 · 1346 阅读 · 0 评论 -
STL深入探究(二、容器的底层实现)
1 前言上一篇 STL深入探究(一、空间配置器)我详细总结了SGI STL采用的空间配置机制,这一篇来总结一下stl容器的底层实现机制。2 序列式容器2.1 VectorVector实现方式类似于“数组”,与array的数据安排和操作方式非常类似,两者唯一的差别就在于空间运用的灵活性。array是静态空间,一旦配置了就不能改变,要想换一个大点的空间,就必原创 2016-08-03 11:00:56 · 2664 阅读 · 0 评论 -
常见C++面试问题总结2
【1】虚函数和纯虚函数?区别和应用? 【2】知道哪些IO模型?见《Unix网络编程··卷一》P123(1)阻塞式I/O(2)非阻塞式I/O(3)I/O复用(4)信号驱动式I/O(5)异步I/O 【3】QQ哪些功能用了TCP?哪些用了UDP?UDP不可靠,为什么还要用它? 腾讯QQ即使用了TCP又是用了UDP,但是以UDP为主原创 2016-08-09 11:15:15 · 1796 阅读 · 0 评论 -
常见C++面试问题总结1
C++面试总结【1】同步通信和异步通信的区别?答:1) 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。2) 同步通信效率高;异步通信效率低。3) 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。【2】TCP协原创 2016-07-14 20:41:42 · 6530 阅读 · 0 评论 -
经典排序算法总结
概览排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。一、直接插入排序1、算法的伪代码(这样便于理解): INSERTION-SORT (A, n) A[1 . . n]原创 2016-04-13 19:28:55 · 1166 阅读 · 0 评论 -
C++实现单例模式
单例模式单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一转载 2016-09-23 21:22:23 · 973 阅读 · 0 评论 -
KMP算法
序对于字符串章节的模式匹配,一直都很排斥去深入学习。不过逃避总归解决不了问题,还是硬着头皮去看吧~解析解析后续补充,今天先附代码。KMP代码#include #include #include #include using namespace std;/***********************************************原创 2016-07-04 16:00:38 · 632 阅读 · 0 评论 -
C++基础知识易错点总结(1)
1. 在C++中,不能被重载的运算符有:sizeof. 成员运算符.* 成员指针运算符:: 作用域运算符?: 条件运算符2. C++语言多态性:编译时多态和运行时多态:编译时多态可通过函数重载和模板实现;运行时多态可通过虚函数实现;实现运行时多态机制称为动态绑定;3. C++中,头文件引用问题:#include 会出错。#inlude " " 首先搜索本地目录,如果原创 2016-02-29 11:27:11 · 1006 阅读 · 0 评论 -
海量数据处理
题目 有一亿个浮点数,请找出其中最大的10000个。提示:假设每个浮点数占4B,一亿个浮点数就要占用相当大的空间,因此不能一次将全部读入内存进行排序。 方法一:独处100万个数据,找出最大的一万个。如果这一万个数据选择够理想,那么以这一万个数据中最小的为基准,可以过滤掉1亿个数据里面99%的数据,这样就在剩余的100W个数据中找出最大的10000个即可。方法二:分块查找,选原创 2016-04-02 15:17:28 · 707 阅读 · 0 评论 -
插入排序(InsertionSort)
插入排序InsertionSort,参数是一个数组包含了n个待排序的数,输入的各个数字是原地排序的(sorted in place),意即这些数字就是在数组A中进行重新排序的,在任何时刻,至多只有其中的常数个数字是存储在数组之外的,当过程InsertionSort执行完毕后,输入数组A中就包含了已排好序的数组输出序列。下面是利用C++语言实现的插入排序代码:#include #defi原创 2013-01-26 16:41:34 · 1728 阅读 · 1 评论 -
代理模式(Proxy)案例
场景:参加家长会 描述:孩子学校组织家长会,做为家长的我们没有时间,正好媳妇她姐有空,所以由她代替我们去参加家长会 代理,说到底是一个代理,最大程度上能执行被代理的最大能力。在一定程度上与被代理者执行力相同。 (一)参加家长会要做的事 /// /// 执行三个动作:去学校,开会,回家 /// public in转载 2013-01-27 20:56:41 · 1289 阅读 · 0 评论 -
VC++6.0快捷键大全
vc++6.0快捷键大全- - F1: 帮助Ctrl+O :OpenCtrl+P :PrintCtrl+N :NewCtrl+Shift+F2 :清除所有书签F2 :上一个书签Shift+F2 :上一个书签Alt+F2 :编辑书签Ctrl+F2 :添加/删原创 2013-01-27 17:34:04 · 1186 阅读 · 0 评论 -
合并排序(归并排序 MergeSort)
合并排序(MergeSort)是一种采用分治法策略对一组无序数据进行排序的算法。 分治法:将原问题划分为n个规模较小而结构与原问题相似的子问题;递归的解决这些子问题,然后合并子问题的结果,就得到原问题的解。分治法在每一层递归上有3个步骤:分解、解决、合并。 分解(Divide):将原问题分解为一系列子问题。 解决(Conquer):递归的解各个子问题原创 2013-01-28 20:04:15 · 2351 阅读 · 0 评论 -
堆排序(HeapSort)
本文主要介绍堆排序算法(HeapSort),堆排序像合并排序而不像插入排序,堆排序的运行时间为O(nlgn);像插入排序而不像合并排序,它是一种原地(in place)排序算法。在任何时候,数组中只有常数个元素存储在输入数组以外,这样,堆排序就把插入排序和合并排序的优点结合起来。 堆排序还引入了另外一种算法设计技术,利用某种数据结构(在此算法中为“堆”)来管理算法执行中的信息。堆数原创 2013-01-28 22:53:51 · 2701 阅读 · 2 评论 -
C++sort 函数用法
MSDN中的定义:templatevoid sort(RanIt first, RanIt last); //--> 1)templatevoid sort(RanIt first, RanIt last, Pred pr); //--> 2)头文件:#include using namespace std;1.默认的sort函数是按升序排。对应于1)s转载 2014-02-01 17:06:16 · 60078 阅读 · 4 评论 -
VS2010 调试C++项目 fatal error LNK1123 错误解决办法
最近用VS2010写C++项目,奇怪的是每次生成解决方案都有一个fatal error LNK1123错误,提示生成失败。查阅资料总结解决方案如下:(1)项目——>属性——>连接器——>清单文件 中生成清单 “是” 修改为 “否” 该方法一般都可以解决问题,但是每次创建项目都要设置一遍(2)查找是否有两个cvtres.exe 删除较旧版本。 第一个是在你 VS201原创 2014-10-10 15:11:40 · 30844 阅读 · 3 评论 -
C++中 #ifdef 和#endif的作用
一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif它的作用是:当标识符已经被定义过(一般转载 2014-10-10 15:54:15 · 98553 阅读 · 7 评论 -
快速排序(QuickSort)
快速排序(QuickSort)也是一种排序算法,对包含n个数组的输入数组,最坏情况运行时间为O(n^2)。虽然这个最坏情况运行时间比较差,但是快速排序通常是用于排序的最佳实用选择,这是因为其平均性能相当好,期望的运行时间为O(nlgn),且O(nlgn)中隐含的常数因子很小,另外它还能够进行就地排序在虚拟环境中也能很好的工作。一、快速排序原理 快速排序也和合并排序一样,基于分治原创 2013-01-29 10:37:22 · 1767 阅读 · 2 评论 -
C++动态申请内存 new T()与new T[]的区别
new与delete我们知道,new和delete运算符是用于动态分配和撤销内存的运算符。new的用法开辟单变量地址空间; i. 如 new int ; 指开辟一个存放数组的存储空间,返回一个指向该存储空间的地址。int *a = new int 即为将一个int类型的地址赋值给整型指针a。 ii. int *a = new int(5); 作用同上,同时将首地址处内容赋值为5转载 2015-08-26 20:01:35 · 2321 阅读 · 0 评论 -
<struct、union、enum>差异
关于C++和C的区别区别最大的是struct,C++中的struct几乎和class一样了,可以有成员函数,而C中的struct只能包含成员变量。 enum,union没区别。struct的定义struct 结构标签{ 类型1 标识符1; 类型2 标识符2; 类型3 标识符3; 类型4 标识符4; 类型5 标识符5;};1、建议将st转载 2015-09-01 21:49:23 · 1590 阅读 · 0 评论 -
C++ 类 直接定义对象与new对象的区别
new创建类对象与直接定义的区别new创建对象的特点new创建类对象需要指针接收,一处初始化,多处使用new创建类对象使用完需delete销毁new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间new对象指针用途广泛,比如作为函数返回值、函数参数等频繁调用场合并不适合new,就像new申请和释放内存一样new创建类对象实例1、new创建类对象例子:CTest* pTest转载 2015-09-01 22:02:24 · 10590 阅读 · 0 评论 -
类对象的建立方式总结
类对象的构造再次阅读与总结C++程序设计语言,依然能够引发深刻的思考与再思考~~~==============================================================================================考虑建立对象(特别是类对象)的各种不同方式,以及它们在后来怎么销毁。一个对象可以通过如下方式建立:一个命名原创 2016-01-04 20:26:13 · 670 阅读 · 0 评论 -
C++基础知识易错点总结(3)
第一部分1. 异步通信和同步通信的区别?同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可以经过任意长的时间间隔再发送下一个字节;同步通信效率高,异步通信效率低;同步通信复杂,双方时钟允许的误差小;异步通信简单,双方时钟可以允许一定误差;同步通信可用于点对多点,异步通信只适用于点对点;2. T原创 2016-03-02 21:50:20 · 1045 阅读 · 0 评论 -
new/delete 和malloc/free 的区别一般汇总
序最近学习遇到内存分配,释放的问题,需要对C中的malloc / free 与 C++中的 new/delete好好总结一番。注明:该博文转载自原文网址,仅为自己学习方便,谢谢原博主。一、基本概念 malloc/free:1. 函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指转载 2016-03-29 17:56:11 · 609 阅读 · 0 评论 -
VS2013环境下Boost库配置
序言最近了解各大互联网公司的校招要求,发现了解Boost程序库也是不可或缺的一部分~于是,决定潜心研究下,这个准标准库~首先,在官网下载boost的最新版本Boost 1.59.0 ,这是当前的最新版本。下面详细给出,VS2013环境下配置boost的详细步骤!Boost编译预处理(1)首先,将下载的压缩包,解压到一个目录下(下面是我的设置): (2)打开文件夹下有个bootstrap.bat文件原创 2015-09-26 11:28:51 · 12275 阅读 · 17 评论