C++
文章平均质量分 61
zhanghaotian2011
这个作者很懒,什么都没留下…
展开
-
优化斐波那契
#includeusing namespace std;int Fibonacci(int n);int main(){ cout<< Fibonacci(10)<<endl; system("pause"); return 0;}int Fibonacci(int n) { long t, r;原创 2013-04-25 17:12:31 · 1075 阅读 · 0 评论 -
C++ auto变量
auto:用来声明自动变量。它是存储类型标识符,表明变量(自动)具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。其实大多普通声明方式声明的变量都是auto变量,他们不需要明确指定auto关键字,默认就是auto的了。auto变量在离开作用域是会变程序自动释放,不会发生内存溢出情况(除了包含指针的类)。使用auto变量的优势是不需要考虑去变量是否被释放,比较安全原创 2013-04-19 15:52:40 · 9739 阅读 · 1 评论 -
C++输入与输出—cout和cin的用法
输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。C++的输出和输入是用“流”(stream)的方式实现的。图3.2和图3.3表示C++通过流进行输入输出的过程。有关流对象cin、cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用转载 2013-04-30 00:41:08 · 139412 阅读 · 7 评论 -
递归之我见
我的感觉:之前因为一提到递归就是想到斐波那契数列,就认为递归就是每次都返回一个结果,让上一层的使用,但是里面到底是咋一层层的机制并没有搞清楚,今天看了几篇博客之后,有点感觉了,所以成文。递归我们总是说直接或者间接的调用自己,可是这句话永远都是会说,但是自己却没有理解。现在我的想法是可以把递归的调用当成是调用别的函数,因为函数调用的机制是,例如main()调用其他一个函数原创 2013-04-21 09:21:40 · 3518 阅读 · 1 评论 -
新手入门:C/C++中枚举类型(enum)
如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!enum box{pencil,pen};//这里你原创 2013-05-01 12:52:08 · 866 阅读 · 0 评论 -
归并排序和快速排序
分治法有很多算法在结构上是递归的:为了解决一个给定的问题,算法要一次或多次地递归调用其自身来解决相关的子问题。这些算法通常采用分治策略(divide-and-conquier):将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。分治模式在每一层递归上都有三个步骤:² 分解(divide):将原问题分解成一系列子问原创 2013-05-04 10:03:17 · 711 阅读 · 0 评论 -
常量指针与指针常量的区别(转帖)
三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:1)const int *p;2)int c转载 2013-05-04 13:04:59 · 505 阅读 · 0 评论 -
堆排序
自己写的程序实现:值得注意的是:HeapAdust这个函数里面s为最中间的时候,他只有一个子节点的情况 那么 j+1造成数组越界,因此一定要限制 j第二点: 数组的下标从零开始的,因此HeapSort ,最中间的那个s = n/2-1 子节点为 2*s+1 h 2*s + 2,而且最后一个节点不用再比较了#include #include #include原创 2013-05-04 13:01:34 · 646 阅读 · 0 评论 -
STL常用string类
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常string类的字符操作:c原创 2013-05-05 09:24:54 · 549 阅读 · 0 评论 -
new\delete,malloc\free的区别
1. new/delete是C++里才有的,而new/delete与malloc/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函数,然后在销毁堆内存。 2. new/delete通常来说是操作符,就是"+"原创 2013-04-19 15:17:34 · 669 阅读 · 0 评论 -
C++ 重写重载重定义区别
综上所述,总结如下:1 成员函数重载特征: a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virtual关键字可有可无2 重写(覆盖)是指派生类函数覆盖基类函数,特征是: a 不同的范围,分别位于基类和派生类中 b 函数的名字相同 c 参数相同 d 基类函数必须有vir原创 2013-04-19 15:08:11 · 677 阅读 · 0 评论 -
动态规划系列
1. 从上面最顶点到下面最后一排的话,如果谈心算法就是选每一步最大的那个值,但是这样的原则不一定是整个可能选择中最大的那个。除非没有只能选择左右两个的限制。动态规划就是每一层中的每一个点到下面都有自己最佳的路线。也就是每个子问题也是最优的,问题的状态是选的第i行j个那个是最优的,就得选i+1行j或者j+1那个是最优的两个中一个比较大的那个。这是从上往下的过程。从下往上过原创 2013-04-28 16:53:49 · 744 阅读 · 0 评论 -
STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
连续存储的元素Vectorc;c.back() 传回最后一个数据,不检查这个数据是否存在。c.clear() 移除容器中所有数据。c.empty() 判断容器是否为空。c.front() 传回地一个数据。c.pop_back() 删除最后一个数据。c.push_back(elem) 在尾部加入一个数据。c[i] 等同于 c.at(i)转载 2013-04-17 15:29:47 · 449 阅读 · 0 评论 -
以容器的方法找数组中的k个最小的数
typedef multiset > intSet;typedef multiset >::iterator setIterator;void GetLeastNumbers_Solution2(const vector& data, intSet& leastNumbers, int k){ leastNumbers.clear(); if(k原创 2013-04-17 15:53:29 · 676 阅读 · 0 评论 -
求数组中最长递增子序列
问题:求一个一维数组中最长递增子序列的长度。解法1:很明显用动态规划的算法,选取下面的阶段(这种选法极为常见),可使阶段间的关系具有无后效性。阶段:在所有以元素k结尾的子数组中,选出其中的最长递增子序列,k=1,2...n。状态:以元素k结尾的最长递增子序列中只有一个最长的递增子序列。决策:决定元素k结尾的最长递增子序列有k-1种获取的途径,前面以任何一个元素结尾的最长原创 2013-04-26 15:17:56 · 2007 阅读 · 0 评论 -
2.13子数组最大乘积
问题:给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合中乘积最大的一组。解法一:采用空间换时间的策略,用两个数组分别记录原整数数组前缀与后缀的叠乘积(前缀s[i]=),再以间隔1个数的方式将这两个数组乘起来就得到所有n-1个数的乘积数组(具体看代码)。[cpp]#include #include using namespace原创 2013-04-25 21:27:37 · 649 阅读 · 0 评论 -
C++:运算符重载、string类重写、数据类型转换、->操作符重载、virtual继承、virtual函数、typeid
1.运算符重载谁调用了成员函数,谁就是当前对象。在C++中运算符操作就是函数。含有const或者引用成员变量时,构造函数要人为的初始化。Int i=9; cout>代码如下:istream & operator>> (istream &ism, person &p){ism>>p.id>>p.name; return ism;} 引用的名字不能和变量相同,如int &i=i是不行的。若转载 2013-04-27 12:50:17 · 963 阅读 · 0 评论 -
C++面试题:list和vector有什么区别?
C++面试题:list和vector有什么区别?考点:理解list和vector的区别出现频率:★★★★解析:vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取(即使用[]操作符访问其中的元素),但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝(复杂度是O(n)),另外,当该数组后的内存空间不够时,需要重新申请一块转载 2013-04-27 12:59:48 · 815 阅读 · 0 评论 -
字符串复制函数
1.strcpy原型声明:extern char *strcpy(char dest[],const char *src);头文件:#include string.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的原创 2013-04-18 19:00:49 · 639 阅读 · 0 评论 -
合并两个有序链表 递归和非递归的形式
因为两个链表head1 和head2都是有序的,所以我们只需要找把较短链表的各个元素有序的插入到较长的链表之中就可以了。之前的思路有问题,之前总是想新建个离链表把较小的放进来,这样浪费空间还浪费时间。源代码如下:1 node* insert_node(node *head, node *item) //head != NULL2 {3 node *p = head;原创 2013-04-19 20:38:06 · 2316 阅读 · 0 评论 -
STL map常用操作简介
1。目录 map简介 map的功能 使用map 在map中插入元素 查找并获取map中的元素 从map中删除元素 2。map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。3。map的功能 自动建立Key - value的对应。key 和 valu原创 2013-05-05 09:29:04 · 530 阅读 · 0 评论 -
cat 命令
功能 1: 在标准输出上显示文件。语法:cat [选项] 文件说明:该命令功能之一是用来显示文件。它依次读取其后所指文件的内容并将其输出到标准输出。该命令的各选项含义如下:-v 用一种特殊形式显示控制字符,LFD与TAB除外。 加了-v 选项后,-T 和 -E 选项将起作用。其中:-T 将TAB显示为 “ù I”。该选项需要与 -v 选项一起使用。即如果没有使用转载 2013-05-06 10:43:15 · 874 阅读 · 0 评论 -
c++ String构造函数 析构函数等号重载
String 类的原型如下class String{ public: String(const char *str=NULL); //构造函数 String(const String &other); //拷贝构造函数 ~String(void); //析构函数 String& operat原创 2013-05-21 09:08:42 · 2658 阅读 · 3 评论 -
C++泛型编程:源起、实现与意义
泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象,这样的事情;熟悉一些其它面向对象的语言的人应该知道,如Java里面这是通过在List里面存放Object引用来实现的。Java的单根继承在这里起到了关键的作用。然而单根继承对C++这样的处转载 2013-05-27 10:05:18 · 957 阅读 · 0 评论 -
C++学习笔记十六-模板和泛型编程(一)
http://www.cnblogs.com/ForFreeDom/archive/2012/07/17/2595682.html概述:所谓泛型编程就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。第二部分中描述的标准库的容器、迭代器和算法都是泛型编程的例子。在 C++ 中,模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。转载 2013-05-27 10:39:14 · 648 阅读 · 0 评论 -
inline函数
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,原创 2013-05-27 15:01:56 · 542 阅读 · 0 评论 -
STL find 算法
接触STL不多,但每当写程序的时候,会先想到用它,还算个好习惯吧,毕竟自己写的链表之类的没那么好。如何使用STL进行查找?通用算法find()和find_if()可以做这些。 就象for_each(), count(), count_if() 一样,这些算法也使用iterator范围,这个范围指出一个list或任意 其他容器中的一部分来处理。通常首iterator指着开始的位置,次iter转载 2013-05-28 11:10:28 · 851 阅读 · 0 评论 -
Mingw编译Boost库
一、BoostBoost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。其官方网站为http://www.boost.org/,目前最新版本为1.46.0,以下以此版本为准。Boost库大部分的子库都是C++模版提供,大部分情况下直接包含头文件就可以了。其中部分子库需要编译,如下图所示:上图中bjam.exe是boost提供的编译工具,下面会转载 2013-05-28 01:01:29 · 643 阅读 · 0 评论 -
在CodeBlocks环境下使用boost库
首先请先编译或安装boost库,使用CodeBlocks编译boost库具体见:Boost库在CodeBlocks环境下的编译。以下内容主要翻译自:BoostWindows Quick Ref ,我所用的编译环境为Win 7家庭版,CodeBlocks V10.05, mingw32 v4.4.1,boostv1.42 1. 为boost库创建一个CodeBlocks全转载 2013-05-25 21:13:55 · 681 阅读 · 0 评论 -
30分钟学习STL
STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其他组件相区别,在本书中STL算法以后接一对圆括弧的方式表示,例如sort()。STL另一个重要特性是它不是面向原创 2013-05-28 14:51:46 · 2351 阅读 · 0 评论 -
链表操作练习——学生信息链表
1 #include 2 #include 3 #define LEN sizeof(struct student) 4 5 /*----------------数据定义----------------------*/ 6 7 //定义一个学生信息的结构体,包括学号,姓名和结构体类型的指针 8 struct student 9 { 10 lon转载 2013-09-29 23:24:55 · 1273 阅读 · 0 评论 -
C/C++ qsort()快速排序的用法
C语言中排序的算法有很多种,系统也提供了一个函数qsort()可以实现快速排序。原型如下: void qsort ( void * base, size_t nmem, size_t size, int ( * comp) ( const void * , constvoid * ) ) ;它根据comp所指向的函数所提供的顺序对base所指向的转载 2013-05-27 09:31:15 · 688 阅读 · 0 评论 -
C++模板元编程 入门简介
最近一直在看STL和Boost,源码里边好多涉及到模板元编程技术,简单了解一下,备忘(Boost Python中的涉及模板元的部分重点关注一下)。范例引入// 主模板templateint N>struct Fib{ enum { Result = Fib1>::Result + Fib2>::Result };};// 完全特化版template <>转载 2013-05-27 10:19:52 · 709 阅读 · 0 评论 -
explicit
explicit的中文解译是:详尽的;清楚的;明确的。那么explicit在C++中是什么意思呢?Explicit(显示的)(1)explicit可以禁止“单参数构造函数”被用于自动类型转换,有效的防止了构造函数的隐式转换带来的错误。(2)explicit只对构造函数起作用,用来抑制隐式转换。(3)所有的单参数的构造函数都必须是explicit的,以避免后台的类型转转载 2013-05-25 20:09:21 · 685 阅读 · 0 评论 -
C++ STL中哈希表 hash_map介绍
C++ STL中哈希表 hash_map介绍0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的转载 2013-05-21 21:02:52 · 567 阅读 · 0 评论 -
字典树
字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。它有三个基本性质,根节点不包含字符,除根节点外每一个节点都只包含一个字符,从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串,每个节点的所有转载 2013-05-21 20:27:15 · 569 阅读 · 0 评论 -
C++虚拟继承__对象内存的分布_虚继承会多余分配虚表v-tab的指
C++虚拟继承__对象内存的分布_虚继承会多余分配虚表v-tab的指针vptr_图1-1清楚的描述了虚继承类对象内存的分布__转载(淘宝共享数据平台和陈皓博客) 2012-05-27 17:11:44| 分类: C/C++开发|字号 订阅更详细的例子,可以参看: http://blog.csdn.net/haoel/art转载 2013-05-21 14:38:07 · 1595 阅读 · 0 评论 -
Boost库在CodeBlocks环境下的编译
Boost库就不多做介绍了。我的编译环境为:Win 7家庭普通版,CodeBlocks10.05,编译器为mingw32gcc。全部编译boost库需要6个g的磁盘空间。 1. 测试你的gcc编译环境。 请确保Mingw工具链目录添加到系统的环境变量PATH中,比如我路径为:"C:\ProgramFiles\CodeBlocks\MinGW\bin",并将转载 2013-05-25 21:14:29 · 717 阅读 · 0 评论 -
[C++语法] 关键字typedef用法(转)
C/C++语言中的typedef相信大家已经不陌生,本文对C/C++语言关键字typedef的各种用法作一个介绍。typedef,顾名思义,为“类型定义”,可以解释为:将一种数据类型定义为某一个标识符,在程序中使用该标识符来实现相应数据类型变量的定义。例如: typedef unsigned int UINT;int main (int argc, char *argv[]){转载 2013-05-25 21:33:29 · 530 阅读 · 0 评论 -
C++ 智能指针详解
一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::share转载 2013-05-25 21:08:59 · 564 阅读 · 0 评论