C++学习
辉哥聊职场聊家庭
一名有温度的IT从业者。 曾就职于ATM等top互联网大厂,央企研究所。 不定期分享职场 | 婚姻 | 育儿 | 个人成长心得体会,关注我,和我一起成长。
展开
-
c++中静态成员变量要在类外部再定义,否则产生link2001错误
c++中静态成员变量要在类外部再定义,否则产生link2001错误.class testClass{ public: static int m_i;};// 类外部定义,若不写会产生// error LNK2001: unresolved external symbol "public: static int testClass::m_i" (?m_i@te转载 2015-08-23 15:30:02 · 2366 阅读 · 0 评论 -
满二叉树和完全二叉树
二叉树分类很多,其中满二叉树哦和完全二叉树比较特殊,因为这两种二叉说效率很高,这里记录几条相关性质。 首先是满二叉树:从形象上来说满二叉树是一个绝对的三角形,也就是说它的最后一层全部是叶子节点,其余各层全部是非叶子节点,如果用数学公式表示那么其节点数n=2^k-1其中k表示深度,也就是层数。也就是说满二叉树的节点数是一系列固定的数,比如说,1,3,7,15...如果节点数不是这个序列中的数转载 2014-08-07 14:01:24 · 9213 阅读 · 0 评论 -
关于拷贝构造函数
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyprint?int a = 100; int b = a; int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单转载 2014-08-04 16:49:17 · 619 阅读 · 0 评论 -
字符串转换成整数(atoi)函数的具体实现
代码如下:#include "stdio.h"int Atoi(char* str){int sum=0;while(*str!='\0'){if (*str>='0' && *str{sum=sum*10+*str-'0';}str++;}return sum;}int main(){char m原创 2014-08-04 10:47:05 · 1813 阅读 · 0 评论 -
NULL, '\0',0 '0'的区别
如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样: 1、NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内容那个:#if !defined(NULL)&&defined(__NEEDS_NULL)#ifdef __cplusplus#define NULL 0#else#d转载 2014-07-28 10:44:05 · 545 阅读 · 0 评论 -
选择排序
一. 算法描述 选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。转载 2014-06-18 15:37:00 · 454 阅读 · 0 评论 -
关于32位系统中int、float、short、double等占多少个字节
我用VC编译的,测试了一下,代码如下:#include "iostream"using namespace std;int main(){coutcoutcoutcoutcoutcoutreturn 0;}原创 2014-08-01 15:01:38 · 263404 阅读 · 4 评论 -
strcpy函数的实现
流行的strcpy函数写法是:void mycpy(char *ch1,const char *ch2){ while(*ch2 != '\0') { *ch1 ++ = *ch2 ++; }}原创 2014-07-28 11:31:32 · 587 阅读 · 0 评论 -
strlen和sizeof的区别
一、sizeof sizeof(...)是运算符,而不是一个函数。 一个简单的例子:int a;cout 在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的转载 2014-08-01 17:29:26 · 504 阅读 · 0 评论 -
关于string.h文件中strlen函数
头文件:string.h格式:strlen (字符数组名)功能:计算字符串s的(unsigned int型)长度,不包括'\0'在内说明:返回s的长度,不包括结束符NULL。原创 2014-07-28 10:38:59 · 1519 阅读 · 0 评论 -
怎样计算一个整数的位数&并把每一位上的数字保存下来
用循环 每次除以10 再用一个变量P每循环一次 加1 知道这个数除去10后的数小于10 P再加1就可以了原创 2014-07-07 18:20:53 · 5819 阅读 · 0 评论 -
四种强制类型转换的总结(const_cast、static_cast、dynamic_cast、reinterpreter_cast)
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,转载 2014-07-25 20:43:06 · 980 阅读 · 0 评论 -
不使用中间变量交换两个整数
不使用中间变量交换两个整数 1. void swap(int &a, int &b) { a = a + b; b = a - b; a = a - b; }2. void swap(int &a, int &b)转载 2014-07-25 20:18:59 · 687 阅读 · 0 评论 -
C语言中,数组名作为参数传递给函数时,退化为指针
C语言中,数组名作为参数传递给函数时,退化为指针;需要数组大小时,需要一个参数传数组名,另一个传数组大小。数组名做函数参数时,就相当于指针了。sizeof对指针操作结果应该是4。 一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的。首先C语言里面不支持数组作为形参来进行调用例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为转载 2014-08-01 11:02:05 · 19013 阅读 · 1 评论 -
内存中的字节对齐
先看个例子:原创 2014-08-01 16:48:30 · 736 阅读 · 0 评论 -
用rand和srand产生某两个数之间的随机数
随机数: int rand(void);void srand (unsigned int seed); rand返回一个范围在0和RAND_MAX(至少为32767)之间的伪随机数。当它重复调用时,函数返回这个范围内的其他数。但是只调用这个函数,在产生一次随机数序列之后,如果调用相同的程序,产生的随机数就是上次产生的随机数序列,除非产生比这个序列更多的随机数,才会在以前的序转载 2014-08-07 15:29:29 · 3297 阅读 · 0 评论 -
C++中的namespace
namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace转载 2015-07-04 16:45:22 · 753 阅读 · 0 评论 -
c++中的前向声明
前向声明:可以声明一个类而不定义它。这个声明,有时候被称为前向声明(forward declaration)。在声明之后,定义之前,类Screen是一个不完全类型(incompete type),即已知Screen是一个类型,但不知道包含哪些成员。不完全类型只能以有限方式使用,不能定义该类型的对象,不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或转载 2015-04-09 19:34:41 · 585 阅读 · 0 评论 -
关于VS中的sln文件
sln文件我们在应用VC6以前,发现的是dsp和.dsw文件,打开dsw文件可以打开整个工程 VS.net2002以后是.vcproj和.sln .sln对应以前的.dsw .vcproj对应以前的.dspvcproj是工程文件,sln是解决方案文件。 一个解决方案里面可以包含多个工程。 打开vcproj文件编译不了可能是因为这个工程里面用到转载 2015-04-09 18:41:11 · 29505 阅读 · 0 评论 -
C++中两个类交叉定义的处理方法
经常会遇上A类中使用了B定做为变量或形参的定义,这个时间如果交叉引用头文件就会出错。处理方法就是预先申明另一个类,这个时候先判断哪个类是主类,哪个类是次类。把次数做预先申明。次类中直接引入主类的头文件。在实现文件中主类的实现需要引用次类的头文件。例:a.hclass Bclass A{public:void setB(const B &obj);};转载 2015-01-13 17:02:20 · 2314 阅读 · 0 评论 -
关于memset函数的用法
函数原型 void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。1.如果用memset(a,1,20); 就是对a指向的内存的20个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,转载 2014-09-29 15:52:25 · 624 阅读 · 0 评论 -
空类的sizeof,有一个虚函数的类的sizeof
题目(二):运行下面的代码,输出是什么?class A{};class B{public: B() {}~B() {}};class C{public: C() {} virtual ~C() {}};int _tmain(int argc, _TCHAR* argv[]){转载 2014-09-16 18:45:47 · 2843 阅读 · 2 评论 -
C++ sizeof的使用总结
说明:以下代码在VS2008中通过,在32位操作系统下。1. 定义sizeof是一个操作符(operator)。其作用是返回一个对象或类型所占的内存字节数。其返回值类型为size_t。(size_t在头文件stddef.h中定义,它依赖于编译系统的值,一般定义为 typedef unsigned int size_t;)2. 语法sizeof有三种语法形转载 2014-09-16 18:31:56 · 487 阅读 · 0 评论 -
stdlib.h和stdio.h的区别
stdlib 头文件即standard library标准库头文件 stdlib 头文件里包含了C、C++语言的最常用的系统函数该文件包含了的C语言标准库函数的定义stdlib.h里面定义了五种类型、一些宏和通用工具函数。 类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR转载 2014-08-18 11:16:19 · 43849 阅读 · 0 评论 -
int(*a)[5]和int a[5]的区别
int (*a)[5]这里的a是行指针,指向的是一个5的数组,那么它的单一跨度为5,即a+1,那么它指向的数值要从首地址向后移动5个位置;int a[5],这只是一个int数组,a是它的首地址,a+1,那么它就指向第二个数值。区别很明显了。原创 2014-08-29 11:48:02 · 5892 阅读 · 0 评论 -
strcmp函数的用法
比较两个字符串。设这两个字符串为str1,str2,若str1=str2,则返回零;若str1>str2,则返回正数;若str1原型:extern int strcmp(const char *s1,const char * s2);所在头文件:string.h功能:比较字符串s1和s2。一般形式:strcmp(字符串1,字符串2)说明:当s转载 2014-08-27 12:08:41 · 44117 阅读 · 0 评论 -
C语言中struct和typedef struct的区别
最常见的一共有三种写法:struct{ int x; int y;}test1;struct test{int x;int y;}test1;typedef struct test{int x;int y}text1,text2;原创 2014-08-23 16:52:54 · 5898 阅读 · 0 评论 -
C语言中关于int、long int、long long 的区别
关于i(1)在VC下没有区别。两种类型均用4个字节存放数据。(2)VC是后出的编译器,之前有很多早期的C编译器,在早期编译器下long int占4个字节,int占2个字节。(3)之所以有“整型”和“长整形”两种不同类型,是C语言在诞生时发明者规定好的,前者存储的整数的值域小于后者。 这个问题不用牵肠挂肚,在VC下用谁都可以。原创 2014-08-21 09:28:15 · 100375 阅读 · 1 评论 -
我常用错的switch…case语句
switch…case语句是C/C++或java很常用的一种语句,我却经常用错~~下面是我曾经用错的几种情况~1.原创 2014-07-04 09:55:09 · 1631 阅读 · 0 评论 -
求素数问题
源代码为:#includevoid main() { int i; int j; int k; for(i=3;i<=100;i++) { for(j=2;j<=(i+1)/2;j++) { k=i%j; if(k==0) break; } if(k!=0) cout<<i<<'\t'; } }原创 2014-06-13 18:30:03 · 554 阅读 · 0 评论 -
关于 *i++与 ++*i
一直都不知道*i++与 ++*i有转载 2014-05-03 20:00:42 · 3651 阅读 · 1 评论 -
C++中类和结构体在内存中的存储问题
简单点,非静态成员变量占用空间,成员函数(无论是否是静态的)则不占用空间:class MyClass{int a; //占用4字节float b; //占用4字节static int c;//在全局数据区,所有对象共享,不计入各对象中int fun1(); //不占用对象的空间float fun2();//不占用对象的空间static i转载 2014-05-04 08:47:43 · 3055 阅读 · 0 评论 -
h和.cpp文件的区别
关于头文件和源文件的分别首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上就可以分别放在一个单元,也就是cpp里面)转载 2014-04-02 15:47:15 · 1073 阅读 · 0 评论 -
C语言分支语句中,巧妙实现某个数据为基数和偶数的两种情况
C语言分支语句中,巧妙实现某个数据为基数和偶数的两种情况实现方法:只需把该数据与 1 进行位与,如果该数为基数,则结果为1 ,如果为偶数,则结果为0(基数转换为二进制时,最后一位为1,偶数转换为二进制时,最后一位为0)eg: // 计算中值 if ((iFilterLen & 1) > 0) { // 数组有奇数个元素,返回中间一个元素 bTemp = bArray原创 2014-04-01 15:07:14 · 2124 阅读 · 0 评论 -
关于中值滤波算法,以及C语言实现
1、什么是中值滤波?中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。中值滤波可以过滤尖峰脉冲。目的在于我们对于滤波后的数据更感兴趣。滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响。 以一维信号的中值原创 2014-04-01 14:58:09 · 83856 阅读 · 12 评论 -
C/C++中取模符号“%”的用途 (获取一系列数值)
我们知道,当A与N取模时(A%N),当A大于N,只要A的值在变化,那么 A%N 的结果可以取到 0,1,2,……N-1 之间的任意一个值,所以,利用这一点,我们可以在程序中定义一个变量flag (int flag;) ,初始化时flag=0;再要改变的地方,调用flag = (flag+1)% N;flag++;(至于上面的flag是否要加1,要视具体情况而定,N的大原创 2014-03-17 15:54:55 · 9318 阅读 · 0 评论 -
用相机拍摄图片,怎么计算某一部分的实际面积
葫芦岛项目中,相机对钢板表面进行拍照,相机离钢板的距离为70cm,拍摄的一幅钢板图片实际面积为39*54,即2120平方厘米,(这个可以把米尺放在钢板上,可以得出拍摄到的钢板长为54厘米,宽为39厘米)照片的分辨率为1280*960,(1280/960 和 54/39 的结果是接近相等的~~)现在把一块白纸放在钢板上,要计算白纸的面积(或者在钢板上画一个白色圆圈,计算圆圈的面积)原创 2014-03-15 17:19:56 · 17055 阅读 · 0 评论 -
java和C++中的static
相同和不相同的部分:一、static修饰方法时方法是可以直接用类名调用的,它是属于静态数据的。静态的数据,在编译的时候即编译器把类加载到内存的时候,只是把类的静态函数和类的静态数据加载内存中并分配一个独立的空间供类的所有的对象使用,即一个对象改变静态数据就会影响另一个对象的静态数据,因为静态数据只有一个,是所有对象共享的。二、但是C++ 中static的含义要比iava广得多原创 2014-03-17 08:58:58 · 844 阅读 · 0 评论 -
关于memset函数的使用
函数原型 void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。1.如果用memset(a,1,20); 就是对a指向的内存的20个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个I原创 2014-03-07 14:20:17 · 689 阅读 · 0 评论 -
scanf是带缓冲的函数
scanf是带缓冲的函数,…… #includevoid main(){ char a,b; printf("please input a="); scanf("%c",&a); //printf("%d",a); printf("please input b="); scanf("%c",&b);转载 2014-03-07 13:58:34 · 598 阅读 · 0 评论