c++
文章平均质量分 58
xiao囡囡
偶是一枚菜鸟女码农
展开
-
《STL源码剖析》学习--六大组件
stl 提供了六大组件,分别为:容器、算法、迭代器、仿函数、适配器和配置器。容器通过配置器取得数据存储空间,算法通过迭代器存取容器的内容,仿函数可以协助算法完成不同的策略,配接器可以修饰或者嵌套仿函数。下面分别简单介绍:1.容器(container) -- 各种数据结构根据数据排列方式分为序列式和关联式:1.1序列式容器(1)vector:与C++提供的静态空间Array原创 2014-01-22 00:04:51 · 965 阅读 · 0 评论 -
《深度探索C++对象模型》--7 站在对象模型的尖端
C++语言的扩充性质1、template(1)memberfunctions只有在被使用时,才会被实例化。(2)注意使用template时,注意针对特定参数时可能有些操作没有定义。template在被实例化之前只能实施有限的错误检查,有些很简单的错误编译器照样通过。(3)template之中对于一个nonmembername的决议结果,都是由“s原创 2014-02-22 10:58:00 · 931 阅读 · 0 评论 -
Effective C++ --7 模板与泛型编程
上一篇Effective C++ -- 6 继承与面向对象设计 41、了解隐式接口和编译器多态 (1)class和template都支持接口和多态。Class支持显示接口,多态是指virtual引起的运行期多态;而template支持隐式接口和编译器多态。 (2)编译器多态是指以不同的template参数具现化function templates会导致调用不同的函数。隐式接口是指t原创 2014-02-01 21:45:20 · 1199 阅读 · 0 评论 -
Effective C++ --6 继承与面向对象设计
上一篇Effective C++ --5 实现 32、确定你的public继承塑模出is-a关系 (1)public继承意味着is-a。适用于base class身上的每一件事一定也适用于derived class身上,因为每一个derived class对象也就是一个base class 对象。33、避免遮掩继承而来的名称 (1)derived class内的名称会掩原创 2014-02-01 17:50:46 · 1176 阅读 · 0 评论 -
Effective C++ --8 定制new和delete && 9杂谈讨论
上一篇Effective C++ --7 模板与泛型编程 Effective C++ --8定制new和delete49、了解new-handler的行为 (1)set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被满足。Operate new确保在分配class对象内存的过程中以class专属之new_handler替换global new-h原创 2014-02-02 20:44:09 · 1062 阅读 · 0 评论 -
Effective C++ --5 实现
上一部分Effective C++ --4 设计与声明 26、尽可能延后变量定义式的出现时间 (1)这样可以增加程序的清晰度并改善程序效率。如定义变量后还未使用遇到return或者抛出异常,这样未使用却增加了调用构造析构函数的成本。27、尽量少做转型动作 (1)使用c++新式转型,而不要是用旧式转性。有四种新式转型:const_cast()、dynamic_cast()、r原创 2014-01-30 17:15:13 · 871 阅读 · 0 评论 -
Effective C++ --4 设计与声明
上一部分Effective C++ --3 资源管理 18、让接口容易被正确使用,不易被误用 (1)设计接口时要考虑客户可能可能做出的错误输入,如参数的形式等。19、设计class犹如设计type (1)对象如何被创建和销毁;对象的初始化和赋值的差别;如果被pass by value使用意味着什么;合法值;继承图系;转换;操作符和函数的类型;什么标准函数设置为私有;什么原创 2014-01-28 17:16:38 · 979 阅读 · 0 评论 -
Effective C++ --3 资源管理
上一部分Effective C++ --2 构造/析构/赋值运算 13、以对象管理资源 (1)为了防止new后提前return等没有执行delete造成内存泄露,利用RAII(resource acquisition is initialization,资源取得时便是初始化时机)对象。 (2)两个常被使用的RAII对象auto_ptr和tr1::shared_ptr原创 2014-01-27 14:24:34 · 944 阅读 · 0 评论 -
《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1
最近在看侯捷的《STL源码剖析》,虽然感觉自己c++看得比较深一点,还是感觉还多东西不是那么明白,这里将一些细小的东西或者概念记录一下。有些东西是根据《C++编程思想》理解的。之前囤积了书,也看了很多,但是书往往太厚,很多东西看过就忘记了,还是记录一下加深印象。1、模板 template1.1 typename: 如果在用模板定义的函数内如果不用typename标出类名,则只能把标示符原创 2014-01-20 09:34:31 · 1834 阅读 · 0 评论 -
Effective C++ --2 构造/析构/赋值运算
上一部分Effective C++ --1 让自己习惯C++ 5、了解C++默认编写并调用哪些函数(1) 编译器暗自为类创建默认构造函数、拷贝构造函数、拷贝赋值函数和析构函数。(2) 拷贝构造函数中对于内置类型通过拷贝bits来进行初始化,非内置类型通过调用成员变量的拷贝构造函数来进行初始化。(3) 对于内含指针成员的类编译器不会生出赋值操作,必须自己定义拷贝赋原创 2014-01-27 11:39:46 · 966 阅读 · 0 评论 -
《STL源码剖析》--知识点
本书主要讲的是SGI STL。1、traits原创 2014-01-22 00:08:12 · 780 阅读 · 0 评论 -
VS2010 MFC exe独立系统环境运行
如何让一个VS 生成的 exe 在没有安装VS 以及 依赖项dll 的电脑上运行,尝试了一下,将中间遇到的问题记录一下。1. 在vs里面编译运行可以,但是点击Debug里面的.exe却显示如下问题:程序目录下已经添加此dll文件,一般情况下,我们会把程序中调用到的dll 文件放于.exe同一目录下。显示为dll文件问题,后发现为路径问题,我的.exe文件 路径为:工程目录/x64/原创 2014-01-08 15:04:57 · 5095 阅读 · 0 评论 -
《STL源码剖析》学习--STL体现的思想
STL总是尽量做到节省内存且效率最高,在看本书中也越来越有深的体会。这里搜集一个stl中提高效率的方法。1.对象的析构如果将一个区间中的所有的对象析构掉,这是如果范围很大,每个析构都是无关痛痒的,对效率有很大伤害。负责对象析构的destroy()有两个版本,第一个版本直接调用对象的析构函数;第二个版本,如果对象的析构是无关痛痒的(其__type_traits是true),则什么也不做,原创 2014-01-22 09:20:13 · 1051 阅读 · 0 评论 -
C++ exception
今天看书发现抛出异常,有几种不同的写法,查找资料找出了不同之处。C++对异常对象的传递有按值传递、按引用传递和按指针传递三种方式。上表格:throw 方式的不同导致catch 时形参类型不同。原创 2014-02-21 11:21:11 · 741 阅读 · 0 评论 -
《深度探索C++对象模型》--1 关于对象
1、封装成本与C比较,在virtual没有参与的情况下,C++的封装没有增加成本。C++在布局以及存取时间上的主要而外负担是由virtual引起的。包括:virtual function机制和virtual base class。2、C++对象模式在C++中,有两种class data members:static和nonstatic,以及三种class mem原创 2014-02-13 16:37:05 · 1084 阅读 · 0 评论 -
由创建一个不能被继承的类引发的对象模型的思考
昨天吃饭和宽妹讨论起以前看过的如何创建一个不能被继承的类,具体实现见http://blog.csdn.net/kuaile123/article/details/21321471同学提到了第一种方法,说new过之后还需要delete释放内存,这样需要把析构函数也设置为private。然后就想到能不能创建一个变量,返回此变量,而不是new一个,这样可以将析构函数设置为pubic不需要de原创 2014-03-26 10:36:24 · 1131 阅读 · 0 评论 -
getline读取不等待输入的问题
先cin >>,然后getline读取时会发生一闪而过不等待输入的情况,用fflush(cin)清除输入缓冲区也是如此,纠结半天终于在妹神指导下搞清楚由于输入一个数据后按了回车键,而getline没有忽略换行符,直接将前面输入的数字后面的换行符当作了输入,导致没有等待输入的情况。此时,需要在getline前面添加cin.ignore()用来清除以回车结束的输入缓冲区的内容,消除上一次输入对原创 2014-04-06 21:40:12 · 3580 阅读 · 1 评论 -
typedef的用途
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针转载 2014-03-16 10:33:52 · 991 阅读 · 0 评论 -
用C++实现不能被继承的类
C++中没有自己定义这样一个类,需要自己实现。(1)将构造函数设为私有不能被继承,则可以将构造函数和析构函数定义为private,这样有个问题,我们也不能新建一个此类的变量。可以使用static来新建和释放内存。(2)使用虚拟继承和友元将一个类A的构造析构函数定义为private;定义子类B是A的友元;子类B虚拟继承(virtual public)A;这样定义的效果原创 2014-03-16 11:52:47 · 1382 阅读 · 1 评论 -
java和C++的区别
JAVA和C++的区别介绍框架纲领如下:(一) 序言:(二) 我学习二者的个人感受:(三) 个人建议:(四) 用JAVA中继承的特性来描述C++和JAVA的关系图示:(五) JAVA和C++的区别(前言导读):(六) JAVA和C++的基本区别(开始华山论剑)1)JAVA摒弃的C++内容。2)JAVA的新特性。3)JAVA和C++都有却不同的特性.(转载 2014-03-13 20:38:43 · 1443 阅读 · 0 评论 -
linux 编译C++错误整理
1、undefined reference to `__gxx_personality_v0'需要-l libstdc++原创 2014-03-11 21:00:30 · 8468 阅读 · 0 评论 -
《深度探索C++对象模型》--5 构造析构拷贝 && 6 执行期语意学
《深度探索C++对象模型》--5构造、析构、拷贝语意学1、纯虚函数:(1)C++可以定义和调用一个纯虚函数,不过只可以静态调用,不可以由虚拟机制调用。注意:pure virtual destructor一定得定义,因为每一个derivedclass destructor会被编译器加以扩张,以静态方式调用其每一个virtual base class及上一个ba原创 2014-02-19 15:17:05 · 1050 阅读 · 0 评论 -
《深度探索C++对象模型》--4 Function语意学
1、member的各种调用方式(1)nonstaticmember functionsC++的设计准则之一就是:非静态成员函数至少必须和一般的非成员函数有相同的效率,编译器内部将成员函数转换为对等的非成员函数实体。通过安插this指针和mangling等完成。(2)namemangling(名字的特殊处理)使名字独一无二,函数的signature为函原创 2014-02-19 11:25:03 · 1095 阅读 · 0 评论 -
《深度探索C++对象模型》--3 Data语意学
1、Data Member的绑定(1)“memberrewriting rule”,一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值的。所以通常将inline定义放于类声明之外。(2)但是对于argumentlist中的名称还是会在第一次遭遇时适当地决议。在extern和nestedtype name之间非直觉绑定操作还是原创 2014-02-19 11:24:09 · 982 阅读 · 0 评论 -
《深度探索C++对象模型》--2 构造函数语意学
上一篇:《深度探索C++对象模型》--1 关于对象1、default constructor的构造操作 C++standard:对于class X,如果没有任何user-declared constructor,那么会有一个default constructor 被暗中(implicitly)声明出来,一个被暗中声明出来的default constru原创 2014-02-17 20:40:26 · 926 阅读 · 0 评论 -
Effective C++ --1 让自己习惯C++
1、视C++为一个语言联邦C++主要的次语言有四种:C、Object-Oriented C++、Template C++和STL。2、尽量以const,enum,inline替换#define(1) #define单纯常量,编译前需要预处理器,没有进入编译的符号表,出错信息不容易定位。(2) #define 不能用于定义常量指针,对const取地址合法,对#define取地原创 2014-01-27 10:46:08 · 1072 阅读 · 0 评论 -
Effective C++ -- 零散知识点整理
Effective C++ --1让自己习惯C++Effective C++ --2构造/析构/赋值运算Effective C++ --3资源管理Effective C++ --4设计与声明Effective C++ --5实现Effective C++ -- 6继承与面向对象设计EffectiveC++ --7模板与泛型编程Effectiv原创 2014-02-02 22:25:35 · 1345 阅读 · 0 评论 -
《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2
上一篇请见可能令你困惑的C++语法1现在继续,2.临时对象的产生和运用临时对象,是一种无名对象。制造临时对象的方法是,在型别之后加一对小括号,并可以给定初值,这样就会调用响应的constructor。在stl中,往往与仿函数一起使用,这样为了使程序看起来干净。template class print{public: void operator(){const T& elem)原创 2014-01-21 09:34:16 · 1385 阅读 · 0 评论 -
《STL源码剖析》学习--traits
在本书迭代器一节提到了Traits编程技法,将其誉为stl源码门匙,在《C++编程思想》一书中,将其列为模板编程中的习语“特征”,这里进行总结。traits技术 也往往和迭代器一起使用。1、理解概念在《C++编程思想》一书中,特征模板技术,定义为一种将与某种类型相关联的所有声明绑定在一起的方法,可以以一种灵活的方法从语境中将类型和值进行“混合和匹配”,同时又使得代码灵活易读且易于维护。原创 2014-01-21 15:42:02 · 1131 阅读 · 0 评论 -
ofstream写不进txt文件的奇怪问题
先记录一下,后面找到解决方法再贴。double m_b[M][N]={0};string filePath = "file.txt";ofstream file(filePath.c_str());//下面三种都可以写进去//file //file //file//下面这样确一直写不进去for(int i=0;i { for(int j=0;j原创 2013-09-05 10:18:58 · 6690 阅读 · 0 评论 -
vector中find 的用法
vector没有自带的find函数,需要用普通的find函数,使用如下: vector nameList1;//给nameList1赋值string name;if(find(nameList1.begin(),nameList1.end(),name) == nameList1.end()){//没有找到}else{//找到了}如果找到原创 2013-09-05 09:10:18 · 13988 阅读 · 2 评论 -
vector iterator not incrementable 的问题
当使用vector#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ list slist; list::iterator iter; slist.push_back(1); slist.push_back(5); slist.push_back原创 2013-09-05 09:03:29 · 9534 阅读 · 3 评论 -
c++ 调用 ffmpeg 编程
这个ffmpeg的使用看的是一头雾水,前两天还在一个劲地编译,也没编译成功。请教了一个同学,说这个库很强大,一般不需要编译就可以使用。这次直接从官网上下的 http://ffmpeg.zeranoe.com/builds/的ffmpeg-20130906-git-bcd1c20-win64-static.7z (静态编译)ffmpeg-20130906-git-bcd1c2原创 2013-09-08 10:13:22 · 13613 阅读 · 12 评论 -
C++测试程序运行时间
#include "time.h"clock_t start, finish;double duration;start = clock();//**************//finish = clock();duration = (double)(finish - start) / CLOCKS_PER_SEC;cout<<"cost :"<<du原创 2013-09-03 10:47:30 · 847 阅读 · 0 评论 -
win7 X64 编译ffmpeg
由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译。要想使用FFMpeg,最先要解决的问题就是在Windows下配置一个类似Linux的编译环境,将FFMpeg编译为二进制库以后,再利用其进行进一步开发。MSVC++并不严格的遵循C标准,所以整个编译过程必须使用MSys+Mi原创 2013-09-07 17:23:11 · 4126 阅读 · 1 评论 -
c++ 从混合中英文数字等的string 中按顺序分别输出
汉字占两个字节,数字和英文字母占一个字节,要输出的话首先判断是英文数字还是汉字,ANSI:汉字区的内码范围高字节从B0-F7,低字节从A1-FEUnicode:汉字的Unicode编码范围为\u4E00-\u9FA5 \uF900-\uFA2D 可知我们只要判断高位字节的最高位是否为一就可以 string s = "一二257【漂亮【jkljl"; for(int原创 2013-09-06 09:28:09 · 3504 阅读 · 0 评论 -
可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
今天遇到一个很奇怪的问题,当代码如下时:char* s = (char*)malloc(20*sizeof(char));string buffer;const char* conchar;char* p;double x = 0.01;while(getline(file,buffer)){ const int len = buffer.length(); conchar =原创 2013-08-19 21:04:20 · 3521 阅读 · 0 评论 -
64位 vs2010 和 opencv2.4.4 配置问题
配置路径,附加依赖项什么的都很对,就是每次运行都出现一堆无法识别的外部符号,而在vs2005中就没问题,感觉vs2010不太稳定,还是用vs2005吧。CString 无法识别,添加 #include原创 2013-08-13 10:54:19 · 2406 阅读 · 0 评论 -
delete[] 出错
如char* s = new char[len];delete[] s; //vs2010运行到此处程序不会报错,但是会响一声,然后程序好像在此处卡死了,不往下执行了前面有过此问题,一直不知道怎么回事,今天终于弄清楚了,请看可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug 点击打开链接 今天发现原来是因为new的len不够大,导原创 2013-08-23 11:47:26 · 3056 阅读 · 0 评论 -
Visual Leak Detector 帮助检查内存泄露
计算机为 win7,X64,vs2010http://vld.codeplex.com/releases从上述地址下载vld-2.3-setup.exe安装后,打开vs2010在项目属性——VC++目录,include添加vld安装目录include 的如: D:\Program Files %28x86%29\Visual Leak Detector\include(其中真原创 2013-08-23 13:56:39 · 1972 阅读 · 0 评论