
C++学习
文章平均质量分 68
nashouat
这个作者很懒,什么都没留下…
展开
-
C++面试出现频率最高的30道题目(一)
原文:http://blog.youkuaiyun.com/shihui512/article/details/90924391.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存转载 2013-06-14 16:50:51 · 692 阅读 · 0 评论 -
C++迭代器 iterator
1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector定义的iterator类型。(2) 使用迭代器读取vector中的每一个元素:vector ivec(10,1);for(vector转载 2012-12-29 13:22:33 · 731 阅读 · 0 评论 -
浅谈C++容器(四)
vector ,deque 和 list 顺序性容器: 向量 vector : 是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即转载 2012-12-28 12:08:43 · 635 阅读 · 0 评论 -
C++string详解
前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱的string find 函数 1.3 string insert, replace, erase 2 string 和 C风格字符串 3 string 和 Charactor Traits 4 string 建议 5 小结 6 附录前言: string 的角转载 2012-12-28 23:29:16 · 780 阅读 · 0 评论 -
浅谈C++容器(六) .
容器适配器 STL 中包含三种适配器:栈stack 、队列queue 和优先级priority_queue 。 适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。 STL 中提供的三种适配器可以由某一种顺序容器去实现。默认下stack 和queue 基于deque 容器实现,priori转载 2012-12-28 14:10:35 · 459 阅读 · 0 评论 -
浅谈C++容器( 三)
有了对数据结构的基本认识,那么对高级语言所提出的容器的概念就很容易理解。下面我们就来了解一下C++ 标准模板库(STL) 提所供的10 种通用容器。 什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包转载 2012-12-28 11:44:24 · 406 阅读 · 0 评论 -
C++模板类的声明、定义和使用
说明: 1. 将C++模板类的声明和定义都放在一个文件,如.h或.cpp文件中,使用的时候加入#include "模板类文件名.h(或.cpp)“即可。 2. 将C++模板类的声明和定义分别放在.h和.cpp文件中且在.cpp文件中包含 #include ".h"。不过在使用时,会因为不同的开发环境而有所不同: a. 在集成开发环境code转载 2012-12-27 23:09:17 · 816 阅读 · 0 评论 -
C++之模板
有以下这样3个求加法的函数: 1 int Add(int x,int y) 2 { 3 return x+y; 4 } 5 6 double Add(double x,double y) 7 { 8 return x+y; 9 }10 11 long Add(long x,long y)12 {13 return x+y;14 }转载 2012-12-27 22:56:38 · 401 阅读 · 0 评论 -
C++模板使用介绍
1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float转载 2012-12-27 21:51:10 · 391 阅读 · 0 评论 -
多态性与虚函数
转载 2012-12-27 12:08:26 · 401 阅读 · 0 评论 -
浅谈C++容器(二)
上面从整体上说明了数据结构的概念和分类,下面就具体的几种常用的数据结构作以说明。 线性表 数据结构中最简单最基本的结构是线性表 。线性表是相同类型的数据元素的有限序列,数据元素之间具有顺序关系。从数据的存储结构上线性表可以分为顺序表和链表两类。顺序表即是对线性结构使用顺序存储结构的方式,链表即是对线性结构使用链式存储结构的方式。其两者的特点就是逻辑的线性结构对不同存储结构的实现。顺序表是一转载 2012-12-28 11:17:19 · 415 阅读 · 0 评论 -
标准C++中的STL容器类简介
容器的概念 所谓STL容器,即是将最常运用的一些数据结构(data structures)实现出来。 容器是指容纳特定类型对象的集合。根据数据在容器中排列的特性,容器可概分为序列式(sequence)和关联式(associative)两种。迭代器是一种检查容器内元素并遍历元素的数据类型。它提供类似指针的功能,对容器的内容进行走访。 #include 例如: std::v转载 2012-12-28 15:25:40 · 1668 阅读 · 0 评论 -
在linux下如何编译C++程序
一、GCC(GNU Compiler Collection)是linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活。它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada g++是GCC中的一个工具,专门来编译C++语言的。 GCC的参数有:( 也是分步实现)原创 2012-12-19 14:16:08 · 36148 阅读 · 0 评论 -
50个c/c++源代码网站
原文:http://blog.youkuaiyun.com/dlutbrucezhang/article/details/88246361、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --转载 2013-06-04 23:28:22 · 1140 阅读 · 0 评论 -
malloc/free与new/delete的相同点和不同点
原文:http://developer.51cto.com/art/201208/352867.htm相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的转载 2013-05-31 00:08:42 · 636 阅读 · 0 评论 -
孙鑫Visual C++视频教程学习笔记:掌握C++
摘要 教程二主要涉及到以下内容:C++经典语法与应用、类的编写与应用、构造函数(Constructor)与析构函数(Destructor)、函数的重载(Overload)、类的继承(Inheritance)、函数覆盖(Override)、基类(Base Class)与派生类(Derived Class)的构造函数、析构函数调用的顺序,如何在派生类构造函数中向基类的构造函数传递参数,this指针,类转载 2012-12-20 12:59:44 · 3105 阅读 · 0 评论 -
C++string 类常用函数的函数原型
string 类的构造函数:string(const char *s);string(int n,char c); //用 n 个字符 c 初始化此外,string 类还支持默认构造函数和复制构造函数,如 string s1;string s2="hello";都是正确的写法。当构造的 string 太长而无法表达时会抛出 length_error 异常 string 类的转载 2012-12-29 12:03:36 · 708 阅读 · 0 评论 -
再次学习C++string
首先,为了在我们的程序中使用string类型,我们必须包含头文件 。如下: #include //注意这里不是string.h string.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单: string Str;这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构转载 2012-12-29 00:36:21 · 454 阅读 · 0 评论 -
浅谈C++容器(五) .
关联容器 set, multiset, map, multimap 是一种非线性的树结构,具体的说采用的是一种比较高效的特殊的平衡检索二叉树—— 红黑树结构。(至于什么是红黑树,我也不太理解,只能理解到它是一种二叉树结构)因为关联容器的这四种容器类都使用同一原理,所以他们核心的算法是一致的,但是它们在应用上又有一些差别,先描述一下它们之间的差别。 set ,又称集合,实际上就是一组转载 2012-12-28 14:03:38 · 539 阅读 · 0 评论 -
浅谈C++容器(一) .
在面向对象的语言中,大多引入了容器的概念。那么 什么 是 容器?实质上就是一组相同类型对象的集合,但是它又不仅仅像数组那样简单,它实现了比数组更复杂的数据结构,当然也实现了比数组更强大的功能。C++ 标准模板库里提供了10 种通用的容器类,它基本上可以解决程序中遇到的大多数问题。 现在我主要来说明这10 种通用容器的功能用途以及相互之间的相同与异同。但是在这里,我不提倡一开始就着手从这转载 2012-12-28 10:48:50 · 511 阅读 · 0 评论 -
CString与string的区别 .
CString,是ATL/MFC共享的, string是C++标准库的相同点:(1)用他们都可以取代对char*的使用。(2)都封装了有丰富的字符串操作接口。(3)他们都是C++的类库。(4)他们都使用了模板的技术。 以string的使用为例,不能有如下用法: string * pstr = NULL; //定义一个指向字符串的转载 2012-12-27 11:06:08 · 426 阅读 · 0 评论 -
多态性与虚函数
多态性与虚函数 面向对象理论中的3个术语:对象、方法和消息。对象(object):不言而喻,它是构成系统的基本单位,有属性和行为两个要素,在C++中,每个对象都是由数据和函数这两部分组成的,数据即是对象的属性,行为称之为方法(method),方法是对数据的操作,通常由函数实现。调用对象中的函数就是向该对象传送一个消息(message),所谓“消息”,其实就是一个命令转载 2012-12-27 10:46:09 · 534 阅读 · 0 评论 -
C++之多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体。也可以这样说就是实现了“一个接口,多种方法”。 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性。前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载。后者则是通过动态联编来实现的,在C++转载 2012-12-27 00:08:33 · 586 阅读 · 0 评论 -
关于"引用"的几点说明
一、引用的基本知识引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名; 说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对其进行初始化。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的转载 2012-12-26 15:39:46 · 347 阅读 · 0 评论 -
C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include转载 2012-12-26 14:08:42 · 314 阅读 · 0 评论 -
C++中拷贝构造函数
1.什么是拷贝构造函数: 拷贝构造函数嘛,当然就是拷贝和构造了。(其实很多名字,只要静下心来想一想,就真的是顾名思义呀)拷贝又称复制,因此拷贝构造函数又称复制构造函数。百度百科上是这样说的:拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。转载 2012-12-26 16:00:39 · 327 阅读 · 0 评论 -
C++中的操作符重载
一、什么是操作符重载操作符重载可以分为两部分:“操作符”和“重载”。说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载。运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符。我们不妨先直观的看一下所谓的操作符重载: 1 #include 2 3 using namespace std; 4 5 int main()转载 2012-12-26 13:41:06 · 346 阅读 · 0 评论 -
new内存失败后的正确处理
应该有很多的程序员对比尔盖茨的这句话有所耳闻:对于任何一个人而言,640KB应当是足够的了。(640K ought to be enough for everybody.)不幸的是,伟大的比尔盖茨也失言了。随着硬件水平的发展,内存变得越来越大,但是似乎仍不能满足人们对内存日益增长的需求。所以呢,我们C/C++程序员在写程序时也必须考虑一下内存申请失败时的处理方式。通常,我们在使用new转载 2012-12-25 11:17:51 · 569 阅读 · 0 评论 -
小心翼翼地重载operator new/ operator delete
虽然C++标准库已经为我们提供了new与delete操作符的标准实现,但是由于缺乏对具体对象的具体分析,系统默认提供的分配器在时间和空间两方面都存在着一些问题:分配器速度较慢,而且在分配小型对象时空间浪费比较严重,特别是在一些对效率或内存有较大限制的特殊应用中。比如说在嵌入式的系统中,由于内存限制,频繁地进行不定大小的内存动态分配很可能会引起严重问题,甚至出现堆破碎的风险;再比如在游戏设计中,效率转载 2012-12-25 15:09:37 · 479 阅读 · 0 评论 -
了解new_handler的所作所为
在使用operator new申请内存失败后,编译器并不是不做任何的努力直接抛出std::alloc异常,在这之前,它会调用一个错误处理函数(这个函数被称为new-handler),进行相应的处理。通常,一个好的new-handler函数的处理方式必须遵循以下策略之一:Make more memory available(使更大块内存有效)operator new会进行多次的内存分配尝试,转载 2012-12-25 14:53:56 · 441 阅读 · 0 评论 -
区分new的三种形态
C++语言一直被认为是复杂编程语言中的杰出代表之一,不仅仅是因为其繁缛的语法规则,还因为其晦涩的术语。下面要讲的就是你的老熟人—new:它是一个内存管理的操作符,能够从堆中划分一块区域,自动调用构造函数,动态地创建某种特定类型的数据,最后返回该区域的指针。该数据使用完后,应调用delete运算符,释放动态申请的这块内存。如果这就是你对new的所有认识,那么我不得不说,你依旧被new的和善外转载 2012-12-25 10:54:43 · 473 阅读 · 0 评论 -
new/delete与new[]/delete[]必须配对使用
void* operator new (size_t); // allocate an object void* operator new [] (size_t); // allocate an array void operator delete (void*); // free an oject void operator delete [] (void*);转载 2012-12-25 09:51:36 · 644 阅读 · 0 评论 -
this指针
1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 例转载 2012-12-26 16:29:44 · 282 阅读 · 0 评论 -
malloc/free VS new/delete
1.malloc和new malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符,它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和转载 2012-12-26 16:57:19 · 330 阅读 · 0 评论 -
堆内存和栈内存
1.堆内存和栈内存堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存 在学习C程序设计语言时,会遇到两个很相似的术语:堆内存和栈内存。这两个术语虽然只有一字之差,但是所表达的意义差别还是很大的,堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。使用栈内存就转载 2012-12-26 19:34:29 · 390 阅读 · 0 评论 -
内联函数和宏
1.内联函数和宏:内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。一个小内存空间的函数非常受益。那么内联函数和宏之间有什么关系呢??实际上,内联函数的功能和预处理宏的功能相似。我们会经常定义一些宏,如 #define TABLE_COMP(x) ((x)>0?(x):0)这就定义了一个宏。看看为什么要使用宏?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中转载 2012-12-26 19:18:15 · 415 阅读 · 0 评论 -
C++新标准库 VS C++旧标准库 VS 对C库的兼容
C++标准库很大,非常大。难以置信的大。怎么个大法?这么说吧:在C++标准中,关于标准库的规格说明占了密密麻麻300多页,这还不包括标准C库,后者只是 “作为参考 ”包含在C++库中。当然,标准库并非总是越大越好,但在现在的情况下,确实越大越好,因为大的库会包含大量的功能。标准库中的功能越多,开发自己的应用程序时能借助的功能就越多。C++库并非提供了一切(很明显的是,没有提供并发和图形用户接口的支转载 2012-12-26 17:07:50 · 999 阅读 · 0 评论 -
C++中四种类型转换方式
类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些转载 2012-12-26 16:44:08 · 319 阅读 · 0 评论 -
C++初始化函数列表
在以下三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况;二,需要初始化const修饰的类成员;三,需要初始化引用成员数据; 原因:C++可以定义引用类型的成员变量,引用类型的成员变量必须在构造函数的初始化列表中进行初始化。对于类成员是const修饰,或是引用类型的情况,是不允许赋值操作的,(显然嘛,const就是防止被错误赋值的,引用类型必须定义赋值在转载 2012-12-26 16:20:40 · 346 阅读 · 0 评论 -
关于C++中的友元函数的总结
1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算转载 2012-12-26 14:31:34 · 347 阅读 · 0 评论