C++
文章平均质量分 71
iamzhangzhuping
这个作者很懒,什么都没留下…
展开
-
C++:多维数组的动态分配(new)和释放(delete)
对于简单的一维数组动态内存分配和释放,相信大家都是知道的,不过还是举个例子吧:1 int *array1D;2 //假定数组长度为m3 //动态分配空间4 array1D = new int [m];5 //释放6 delete [] array1D;但是,对于多维数组动态分配,大家可能不太熟悉。下面以常见的二维和三维数组为例来说明: 1. 二维数组的动态分配和释放 int原创 2017-10-12 22:18:13 · 1319 阅读 · 0 评论 -
给定整数n(0<n<10),求全排列。比如n=3, 输出123 132 213 231 312 321
目录目录思想主函数mainPermuint nnext_permuvector num n思想 假设给定6,那么输出的顺序应该是 : 123546,123564,123645 ,123654,124356 …..654321主函数mainint main(int argc, char const *argv[]){ cout << "Input an number..." << e原创 2016-02-26 09:30:54 · 1507 阅读 · 0 评论 -
c++静态函数
c++语言 静态成员数据和静态方法 对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变量在对象创建之前就已经被分配了内存空间) 静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,原创 2016-03-10 15:06:32 · 503 阅读 · 0 评论 -
static_cast强制转型疑问
C++Primer中:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。ps:顶层const表示指针本身是个常量;底层const表示所指对象是个常量。例:const char *m; // 底层conststring t=static_cast(m);为什么这样的操作合法,而且t是可写的,static_cast难道也去除了const属性?原创 2016-02-24 13:43:34 · 838 阅读 · 0 评论 -
正确使用#include和前置声明(forward declaration)
http://blog.csdn.net/spritelw/article/details/965702差不多一年时间没用过C++写过程序了,由于工作的需要,我又回到了C++的阵形。在工作的过程中遇到了很多麻烦,当我往工程里加一个类,而且那个类又与工程里的类相关,如有那个类型的成员变量。情况如下//////A.h///////////class A{..转载 2016-02-24 09:42:16 · 504 阅读 · 0 评论 -
C++ 虚函数与纯虚函数
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:[cpp] view plain copy原创 2016-01-25 20:25:09 · 446 阅读 · 0 评论 -
C++ vector.data()
T* data() noexceptconst T* data() const noexcept返回指向vector中第一个数据的指针或空vector之后的位置vector_data.cpp#include #include #include using namespace std; int main(){原创 2016-02-22 19:28:43 · 15246 阅读 · 1 评论 -
C++ 强制转换函数const_cast,reinterpret_cast,static_cast,dynamic_cast
总结C++中的所有强制转换函数(const_cast,reinterpret_cast,static_cast,dynamic_cast)C 风格(C-style)强制转型如下:(T) expression // cast expression to be of type T函数风格(Function-style)强制转型使用这样的语法:T(expression)原创 2016-01-13 17:43:40 · 473 阅读 · 0 评论 -
C++ 局部类
局部类 在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。局部类不能被外部所继承。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。 int a; void fun() { static转载 2016-01-13 16:09:33 · 1015 阅读 · 0 评论 -
C++ 嵌套类
http://www.cppblog.com/aaxron/archive/2013/04/22/199634.html#include "stdafx.h"/*c++嵌套类可以在另一个类内部定义一个类,这样的类嵌套类(nested class)嵌套类是独立的类,基本上与它们外围类不相关,因此,外围类和嵌套类的对象是互相独立的。嵌套类型的对象不具备外围类所定义的成员转载 2016-01-13 16:07:50 · 413 阅读 · 0 评论 -
C/C++ void及void指针
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。2.void的含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个v原创 2016-01-13 15:18:05 · 10875 阅读 · 2 评论 -
C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!!(1)构造函数、析构函数与赋值函数构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不编写上述转载 2016-01-12 14:22:23 · 551 阅读 · 0 评论 -
将数组中等于n的元素移到数组的最前面,尽量减少数组元素的移动次数和额外存储
目录目录题目主函数mainsort函数题目将数组中等于n的元素移到数组的最前面,尽量减少数组元素的移动次数和额外存储,比如数组为[2,4,5,2,5,8,11,44,29,16,2],n=2, 则输出数组[2,2,2,4,5,5,8,11,44,29,16],其中4,5,5,8,11,44,29,16的顺序不指定,不必维持在原数组中的顺序。主函数mainint main(int argc原创 2016-02-26 11:25:36 · 1063 阅读 · 0 评论 -
"cblas_ddot"未定义的引用
#include <iostream>#include <math.h>extern "C" {#include <cblas.h>}using namespace std;int main(int argc, char const *argv[]){ double a[6] ={2.,1.,1.5,1.,1.,1.}; double b[6] ={2.,3.,2.,3.,原创 2016-02-27 19:44:40 · 3311 阅读 · 0 评论 -
cmake 与 make
著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:玟清 链接:https://www.zhihu.com/question/27455963/answer/36722992 来源:知乎make 是用来执行Makefile的。Makefile是类unix环境下(比如Linux)的类似于批处理的”脚本”文件。其基本语法是: 目标+依赖+命令,只有在目标文件不存在,原创 2016-02-29 16:25:28 · 858 阅读 · 0 评论 -
SSE指令 intrinsic函数总结(持续更新...)
_mm_cvtps_epi32 :Converts the four single-precision, floating-point values of a to signed 32-bit integer values. 意思是: 把四个float变量强转为四个int变量。其中需要注意的是他的截断规则:四舍五入,在进位后末位是偶数的进,否则不进位。_mm_cvttps_epi32: Conve原创 2017-07-08 21:40:10 · 3283 阅读 · 0 评论 -
C++ extern 和 static
简要说下extern: extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 C/C++中extern关键字详解extern 和 static 上文对extern 和 static做了说明,并举了例子,我对其进行了测试:test1.h#ifndef TEST1H#define原创 2016-09-05 12:18:29 · 611 阅读 · 0 评论 -
C++ istream get() ostream::put()
get() get()函数比较灵活,有3种常用的重载形式:一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,原创 2016-08-25 09:59:00 · 3682 阅读 · 0 评论 -
C++ 嵌套类与外围类间的成员访问
/** * 嵌套类与外围类间的成员访问 * 1. 外围类不能访问嵌套类的非静态数据成员, 反之亦然; * 2. 外围类可以访问嵌套类的静态成员,但必须加上名字限定,嵌套类可以访问外围类的静态成员 * 3. 在外围类的成员函数中,可以直接调用嵌套类的静态成员函数,但调用非静态成员函数必须借助嵌套类对象来调用 * 4. 在嵌套类的成员函数中,可以直接调用外围类的静态成员函数,但不能调用非静态函原创 2016-04-24 15:49:43 · 3520 阅读 · 0 评论 -
输入一个递增排序的数组和一个数字s,在数组中寻找两个数,使得这两个数的和为s
题目:输入一个递增排序的数组和一个数字s,在数组中寻找两个数,使得这两个数的和为s。注意:已经是一个递增排序数组,所以要牢牢得抓住这个特性。#include <iostream>using namespace std;class Solution {public: bool FindNumsWithSum(int data[], int length, int sum, int *num1,原创 2016-04-10 22:26:36 · 2438 阅读 · 0 评论 -
找出数组中只出现一次的数字
题干:找出数组中只出现一次的数字——一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。#include <iostream>#include <vector>using namespace std;class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1原创 2016-04-10 20:49:56 · 432 阅读 · 0 评论 -
C++ 友元
Friend.h#ifndef FRIEND_H_#define FRIEND_H_#include <vector>#include <iostream>/** * 令成员函数为友元,需要注意顺序,要仔细组织程序的结构,以满足声明和定义的彼此以来关系: * 1. 首先定义B类,其中声明funb2函数,但是不定义它 * 2. 定义A类,其中包含对B::funb2的友元声明 * 3. 定原创 2016-04-10 16:13:05 · 330 阅读 · 0 评论 -
对象的静态类型与动态类型
由于继承导致对象的指针和引用具有两种不同的类型: 静态类型 和 动态类型 。 静态类型 :指针或者是引用声明时的类型。 动态类型 :由他实际指向的类型确定。 例如:GameObject *pgo = new SpaceShip; //pgo静态类型是 GameObject动态类型是 SpaceShip*Asterioid *pa = new Asterioid; //pa的静态类型是 Ast原创 2016-04-12 19:54:26 · 787 阅读 · 0 评论 -
扑克牌顺子
/** * 扑克牌顺子 * 先排序,再统计0的个数,再统计空缺的个数 */#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public: bool IsContinuous( vector<int> numbers ) { if (原创 2016-04-12 10:12:06 · 378 阅读 · 0 评论 -
抽空了解一下opencv的文件系统结构
抽空了解一下opencv的文件系统结构。先上图,这是opencv 源码解压后的截图。 然后是编译后的文件系统截图~/opencv-3.0.0-rc1 对比可知,opencv工程经编译后,主要的变化是得到了一个build文件夹。然后是~/opencv-3.0.0-rc1/build文件夹截图 而build文件下,主要的也是一个lib文件夹,里面是各种编译好的库,主要是共享库。~/openc原创 2016-02-29 20:01:14 · 713 阅读 · 0 评论 -
Eclipse-CDT
这是本人的一篇 Eclipse-CDT 安装、配置过程教程,记录了一些通用的 CDT 配置设置,以及一些 CDT 的使用技巧。 转自Eclipse-CDT 安装、配置过程教程,记录了一些通用的 CDT 配置设置,以及一些 CDT 的使用技巧目录安装 Eclipse-CDT 常用的 Eclipse 扩展 Eclipse 的 Workspace 配置 Workspace 的一般配置 颜色与字体转载 2016-02-29 16:29:21 · 1443 阅读 · 0 评论 -
C++ 单例模式Singleton
问题情景在windows下面打开任务管理器,我们会发现,你只能打开一个任务管理器。如果在已打开一个任务管理器的情况下,再次打开任务管理器,系统会调出已经打开的窗口,而不是重新打开新的窗口。在系统中,之多只能存在一个任务管理器的实例。按照一般的思路,我们需要定义一个TaskManager的类(如下)class TaskManager{public: TaskManager(){}原创 2016-01-11 12:41:52 · 714 阅读 · 0 评论 -
C++ Singleton (单例) 模式最优实现
http://blog.yangyubo.com/2009/06/04/best-cpp-singleton-pattern/C++ Singleton (单例) 模式最优实现written on Thursday, June 4, 2009索引静态化并不是单例 (Singleton) 模式饿汉模式懒汉模式 (堆栈-粗糙版)懒汉模式 (局部静态变量-最佳版)转载 2016-01-11 12:43:56 · 525 阅读 · 0 评论 -
C++ string类的构造函数
在c++中string类的构造函数有六种方式分别是:1.string(const char * s)说明:将string对象初始化为s指向NBTS。NBTS为null-byte-temnated string的缩写,表示以空字符结束的字符串------传统的C字符串。2.string(size_type n,char c)说明:创建一个包含n个元素的string对象,其中每个元原创 2016-01-21 20:13:43 · 14083 阅读 · 0 评论 -
C运行时库(C Run-time Library)详解
http://blog.csdn.net/wqvbjhc/article/details/6612099一、什么是C运行时库1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控转载 2016-01-05 13:06:43 · 589 阅读 · 0 评论 -
C++的const类成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,[cpp] view plaincopyconst char blank = ‘’; blank = ‘\n’; // 错误 面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员原创 2016-01-04 21:32:03 · 410 阅读 · 0 评论 -
C++ #include—尖括号和双引号的区别
如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作#include ,但有时候又会出现#include "文件名"。你会很疑惑,到底哪个是对的呢?为什么要有这两种不同的写法呢?这两种写法都是正确的写法,但是它们却是有区别的。我们知道C++已经有一些编写好的头文件(比如标准函数库等等),它们存放在VC++的Include文件夹里。当我们使用#includ原创 2016-01-02 21:07:15 · 564 阅读 · 0 评论 -
C++应用程序的编译过程
http://www.cnblogs.com/zhaoxb1982/archive/2009/08/07/1540713.html目前正在学习《C++ Templates》一书。在有了一个初步的概念以后,我觉得有必要了解一下模板的编译过程。而要了解模板的编译过程就必须从普通的C++应用程序开始。下面是我对C++应用程序的编译过程的理解。敬请指教!一:一般的C++应用程序的编译过程。转载 2015-10-30 14:13:16 · 469 阅读 · 0 评论 -
C/C++编译过程
C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译预处理 2) 编译、优化阶段 3) 汇编过程 4) 链接程序 一、编译预处理 (1)宏定义指令,如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,原创 2015-10-30 11:17:43 · 339 阅读 · 0 评论 -
c++: size_type与 size_t一些概念
http://blog.csdn.net/lzx_bupt/article/details/6558566size_type: 由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型 string抽象意义是字符串, size()的抽象意义是字符串原创 2015-10-29 22:13:13 · 463 阅读 · 0 评论 -
size_t、size_type、int
size_t和size_type为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意string和vector类对象的长度2. string::size_type 制类型一般就是unsigned int, 但是原创 2015-10-29 22:11:11 · 1135 阅读 · 0 评论 -
C++ main函数 argc,argv传递参数的含义
main(int argc,char **argv) argv为指针的指针 argc为整数 char **argv or: char *argv[ ] or: char argv[ ][ ]main()括号内是固定的写法。下面给出一个例子来理解这两个参数的用法:假设程序的名称为prog,1.当只输入prog,则由操作系统传来的参数为:原创 2015-10-29 21:56:41 · 1555 阅读 · 0 评论 -
Skip List(跳跃表)原理详解与实现
http://www.cppblog.com/mysileng/archive/2013/04/06/199159.html 作者写得很好! Mark!本文内容框架:§1 Skip List 介绍§2 Skip List 定义以及构造步骤§3 Skip List 完整实现§4 Skip List 概率分析§5 小结转载 2015-10-29 20:41:52 · 659 阅读 · 0 评论 -
#define详解
http://www.crifan.com/_define_detailed/1. #define的变体,即#ifndef,可以防止头头文件的重复引用[解释]#ifdef和 #define组合,一般用于头文件中,用以实现防止多个文件对此同一个头文件的重复引用.实际使用中,即使你的头文件暂时没有被多个文件所引用,为了增加程序可读性,移植性,健壮性等,还是最好都加上。其用转载 2015-10-27 20:09:06 · 501 阅读 · 0 评论 -
C++ snprintf函数
printf()/sprintf()/snprintf()区别 先贴上其函数原型printf( const char *format, ...) 格式化输出字符串,默认输出到终端-----stdoutsprintf(char *dest, const char *format,...) 格式化输出字符串到指定的缓冲区snprintf(char *dest, siz原创 2016-01-21 20:32:20 · 4052 阅读 · 0 评论