C/C++
文章平均质量分 67
追随圣光吧
本人还在学习中,求大佬们多多帮忙哈
展开
-
10种常用排序(代码版)
#include <iostream>#include <assert.h>using namespace std;template <class T2>void Swap(T2 &a, T2 &b){ T2 temp = a; a = b; b = temp;}template <class T1>void Print(T1 *a, int n){ a原创 2017-09-12 09:45:13 · 409 阅读 · 0 评论 -
C++ 引用与指针的区别
C++引入了一个概念:引用。引用是变量的一个别名,通过这个别名和原来的名字都可以找到这份数据。一个人的名字和绰号,表示同一个人。1、引用和变量 &name = data;引用必须在定义的时候初始化,后面不能再引用其他数据,类似于const。例如下面的小程序:引用在定义的时候加&,使用的时候不用,加&表示地址。不希望引用修改数据,就在前面加cons原创 2017-07-16 10:29:55 · 314 阅读 · 0 评论 -
静态库与动态库(共享库)
说到库,先来简单的说一下库的使用。 其实,程序的实现主要工作之一就是函数的实现嘛,这个学习计算机语言的筒子都知道,但是有一些非常基本,常用的函数比如打印信息(printf),文件的打开关闭函数(fopen,fclose),计算函数等等,这些函数都是编程系统集中到库中实现的。这是为了降低编程的工作量,有效提高编程的效率,另外,由于这些函数库往往是由一些资深的程序员编写的,具有出色的运行性能原创 2017-06-15 18:47:18 · 412 阅读 · 0 评论 -
C++string类学习笔记
原本在C中我们是使用char *类型或者字符数组char a[]这样的来实现字符串的,但是在C++中有了string类,极大地方便了我们队字符串进行操作。今天就来详细的学习一番string类。 1、想要使用string类,首先需要在你的cpp文件中包含,即:#include <string>并且需要using std::string或者using std::wstring或者直接using nam原创 2017-07-11 13:36:26 · 206 阅读 · 0 评论 -
C++ 友元函数详解
转载:http://blog.csdn.net/insistgogo/article/details/66086721、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率转载 2017-07-11 11:24:58 · 1634 阅读 · 0 评论 -
C/C++ const 关键字详解
转载: http://blog.csdn.net/Eric_Jo/article/details/4138548C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。转载 2017-07-11 11:09:16 · 215 阅读 · 0 评论 -
C/C++ static关键字详解
转载:http://blog.csdn.net/majianfei1023/article/details/45290467C 语言的 static 关键字有三种(具体来说是两种)用途:1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。[cpp] view plain copyint foo(){转载 2017-07-11 10:54:09 · 208 阅读 · 0 评论 -
C++this指针解析
C++有个this指针的概念,this指针是一个指向当前对象的指针,或者说当前对象的地址。this指针只能在一个类的非静态成员函数中使用。C++的非静态成员函数的第一个默认并且被隐藏的参数是T *const register this,比如我们在Student这个类里声明这样一个函数:int SetName(const char *name);其实编译器处理的时候会变为 int Set原创 2017-07-11 10:41:00 · 383 阅读 · 0 评论 -
C++类与对象(概念部分)
概念描述类成员函数类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类访问修饰符类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private。构造函数 & 析构函数类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数转载 2017-07-10 18:55:23 · 218 阅读 · 0 评论 -
C++面向对象编程(概念)
转载C++面向对象编程1,访问属性区分内部可见(成员函数对数据成员的访问)和外部可见(对象对成员的访问)1)public:内部和外部皆可见2)private:内部可见,外部不可见3)protected:内部可见,继承类的内部可见,外部不可见继承属性:public类型的继承:在子类中,原来public,protected,private转载 2017-07-10 18:52:32 · 256 阅读 · 0 评论 -
C++带默认值的函数
原来在C语言里函数的参数是不能够带默认值的。比如int func(int a, int b = 1);这样的声明就是不正确的。但是在C++中上述的声明是被允许的,代码如下:运行结果是:3 。函数的默认参数值,即在定义参数的时候同时给它一个初始值。在调用函数的时候,我们可以省略含有默认值的参数。也就是说,如果用户指定了参数值,则使用用户指定的值,否则使用默认参数的值。所以原创 2017-07-10 18:47:08 · 2235 阅读 · 0 评论 -
GCC 编译器的一些基本操作
GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软原创 2017-06-06 11:01:46 · 652 阅读 · 0 评论 -
关于浮点数的存储方式探讨
主要是浮点数怎么转换为二进制数?下面来看一张图:第一位是符号位,这个和整型数的存储方式相似,0表示正数,1表示负数。第二部分是exponent,这部分八位(64位系统是11位)是指数位,是以2为底数的指数,而且是从2^7-1开始,也就是0111 1111,十进制是127开始的,即0111 1111代表的是2^0。第三部分是mantissa,这部分是23位(64位系统是52位)基原创 2017-06-16 17:48:29 · 314 阅读 · 0 评论 -
浅谈文件操作函数的使用与区别
一、fopen 与 fclose 函数的使用fopen 函数用于打开一个文件函数定义:FILE *fopen(const char *filename, const char *mode);fopen 的返回值是一个文件指针,FILE 是在stdio.h中定义的结构体类型,封装了与文件相关的信息:struct _iobuf { char *_pt原创 2017-05-10 22:40:32 · 525 阅读 · 0 评论 -
结构体的内存对齐问题探索
在讨论这个问题之前我觉得先回顾一下结构体的各项性质。 1、结构体如何定义?struct A{int a;int b;};A a1 = {1,2};struct B b1{.a = 1,.b = 2};struct C c1{ a:1,b:2};第一种比较常用,由它也原创 2017-05-16 07:53:28 · 413 阅读 · 0 评论 -
浅谈GCC编译的4个阶段
其实学过编程的人应该都知道编译这么个东西,英文叫做compiling,看上去也就是gcc 某个源文件,然后就生成了一个可执行的文件a.out。不过能够深入理解GCC具体的编译过程却是不少人忽视了的,下面我就来谈谈编译的4个阶段。 GCC 编译可以分为4个阶段:预处理(pre-processing)、编译(compiling)、汇编(assembling)、链接(linking)。原创 2017-05-20 09:11:28 · 3362 阅读 · 0 评论 -
简要谈谈C++继承方式与访问权限
简单地说下C++类的3种继承方式,分别是public继承,protected继承,private继承。 最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认private。struct则相反,默认的是public继承。结合下面的图示和代码,对C++的继承就有了比较清晰的认识了。继承之后,derived class 继承过后的member的属性就是转载 2017-07-16 10:37:59 · 324 阅读 · 0 评论 -
C++中显示调用构造函数和析构函数
#include <iostream> using namespace std; class A { public: A() { cout << "Default constructor is called./r/n"; } A(int ix) { cout << "转载 2017-07-16 15:06:10 · 847 阅读 · 0 评论 -
C++继承时构造与析构函数以及using,继承时的遮蔽浅谈
前面的博文简要的谈了C++继承的三种方式,以及它们各自的对内,对外的访问权限。那么既然非private的成员函数都可以继承,构造和析构函数呢?另外有没有办法改变继承过来的基类的成员的访问权限,以及如果有同名成员函数的时候怎么处理?1、C++继承时的构造函数与析构函数。C++继承的时候可以获得基类全部的成员变量和成员函数,但是只有构造函数和析构函数除外。(1)构造函数构造函数的调用顺原创 2017-07-16 15:17:45 · 392 阅读 · 0 评论 -
运算符面试题(面试宝典搬运,方便看)
例题1、以下程序输出结果是?(附答案)#include <iostream>using namespace std;int main(){ unsigned char a = 0xa5; //首先是1010 0101 unsigned char b = ~a >> 4 + 1; //~优先级位于第2 >> 位于第6 +位于第5 所以先取反,然后计算出5,然原创 2017-09-12 09:42:10 · 702 阅读 · 0 评论 -
用1, 3, 5, 7四个数能组成多少个不重复的三位数
题目简单直接上代码:#include <iostream>using namespace std;void Print(){ int a[4] = {1, 3, 5, 7}; int i, j, k; for(i = 0; i <= 3; i++) { for(j = 0; j <= 3; j++) { fo原创 2017-09-16 11:22:25 · 4433 阅读 · 0 评论 -
字符串反转,单词不反转实现
直接上代码:#include <iostream>#include <string.h>using namespace std;void RevStr(char *str){ int k = 0; int i = 0; int j = 0; if(str == NULL) { return ; } int len = str原创 2017-09-16 11:11:18 · 813 阅读 · 0 评论 -
C/C++volatile关键字详解
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that转载 2017-08-26 15:21:34 · 5437 阅读 · 0 评论 -
关于宏定义的一些使用方法和注意点总结
我在写代码的时候喜欢使用宏,不仅使代码看起来整洁,而且用好了还能极大的减轻编码的工作量,但是如果 使用不当的话,出了问题查找起来就就非常的难了,下面的总结大部分是从网上看到的,也有一些是我自己在工作中总结出来的。宏使用中的常见的基础问题1. 防止一个头文件被重复包含 #ifndef BODYDEF_H #define BODYDEF_H //头文件内容 #e转载 2017-08-05 22:51:26 · 10862 阅读 · 0 评论 -
关于strcpy与memcpy函数的地址重叠问题
大家一般认为名不见经传strcpy函数实现不是很难,流行的strcpy函数写法是:[cpp] view plaincopychar *my_strcpy(char *dst,const char *src) { assert(dst != NULL); assert(src != NULL);转载 2017-08-01 15:28:01 · 1081 阅读 · 0 评论 -
c++拷贝构造函数、深拷贝、浅拷贝
转载:http://blog.csdn.net/lwbeyond/article/details/6202256/一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100; int b = a; 而类对象与普通转载 2017-07-19 20:33:27 · 221 阅读 · 0 评论 -
C/C++ register关键字学习
在C语言中有这么一个关键字——register,这个关键字的意思就是告诉编译器,最好把该关键字修饰的变量放在寄存器内。关于这个关键字还有一些注意点要学一下。 1.被register修饰的变量必须是CPU能够接受的类型,因为有的机器识别不了浮点型,所以register变量的长度应该小于等于整形,但现在有的机器是可以使用浮点型的register变量的。 2.在C语言中,一旦声明为寄存器变量原创 2017-07-31 21:54:56 · 3873 阅读 · 1 评论 -
C++运算符重载浅谈
1、运算符重载的概念 所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。实际上,我们已经在不知不觉中使用了运算符重载。例如,+号可以对不同类型(int、float 等)的数据进行加法操作;<<既是位移运算符,又可以配原创 2017-07-18 14:48:31 · 370 阅读 · 0 评论 -
C++命名空间浅析
转载– 命名空间 在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。1)作用域与命名空间 l 相关概念与命名空间相关的概念有:n转载 2017-07-08 12:49:50 · 250 阅读 · 0 评论 -
C++ new 与 delete 关键字
转载 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢?new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候用它们? 你知道 operator new 和 operator delete 吗? 为什么 new [] 出来的数组有时可以用 delete 释放有时又不行? … 如果你对这些问题都有转载 2017-07-08 12:51:30 · 387 阅读 · 0 评论 -
C++函数重载
转载 在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似: void swap1(int *a, int *b); //交换 int 变量的值 voi转载 2017-07-08 12:52:13 · 249 阅读 · 0 评论 -
C++内联函数inline
转载 突然看到C++Primer中讲到,对于vector的一个循环,调用语句:(示例代码i=v.begin()不是很规范,虽然不会出错,客官请将就着看)[cpp] view plain copy for (int i=v.begin() ; idefine MAX(a, b) (a) > (b) ? (a) : (b)在执行语句: [cpp] view plain copy result =转载 2017-07-08 12:52:54 · 186 阅读 · 0 评论 -
C/C++中的数据类型与0的比较方法
在C/C++中我们经常需要检查参数是否为有效值,最常用的就是和0进行比较,这次我列出一些常用的和0比较的数据类型的方法。 先是代码如下:#include <iostream>using namespace std;int main(){ int a = 0; int *p = NULL; float f = 0.0; bool t = false; if (原创 2017-07-07 20:34:34 · 917 阅读 · 0 评论 -
C++虚继承与虚基类
C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。 class 派生类名:virtual 继承方式 基类名 virtual是关键字,声明该基类为派生类的虚基类。转载 2017-07-16 15:44:45 · 2492 阅读 · 0 评论 -
typedef 的一些小问题
关于typedef学过C的都不陌生。其作用是为一种数据类型定义一个新的名字。这里的数据类型包括基本数据类型和自定义数据类型。在编程中使用typedef的目的一般有两个:1、给变量一个容易记忆并且意义明确的新名字2、简化一些比较复杂的类型声明typedef常与结构体一起使用。如链表的结点:typedef struct node{ int data;str原创 2017-05-29 10:08:52 · 319 阅读 · 0 评论 -
浅谈C语言程序分区
学过C语言的应该都知道程序分区这个概念,只是可能不是那么的熟悉,下面就简要的谈论一下C程序的分区。比如在一个C程序中写一个i全局变量int a = 10;那么这个整形变量a存放在哪儿,又或者是函数中定义的,又该放在哪儿。1、未初始化的全局变量和初始化为0的全局变量(.bss 段)bss类型的全局变量只占运行时的内存空间,而不占用文件空间。存在于整个程序运行过程中。2、初始化过且非零原创 2017-05-29 10:55:09 · 895 阅读 · 1 评论 -
C语言学习历程——Training04字符串训练02
2. 题目:请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出分析:条件分支编写每个进制的算法。下面是代码实现:/*************************************************************************** 题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制原创 2017-04-30 10:27:51 · 257 阅读 · 0 评论 -
C语言学习历程——编程练习2——07
7.找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍 例如:将142857的首位数字1移动到末位之后得到的数是428571,而428571=3*142857,因此142857 是Troitsky数 编程要求: (1) 编写函数int Troitsky(long a[]),其功能是求出10000以内的所有Troitsky数,原创 2017-05-02 14:44:53 · 400 阅读 · 0 评论 -
C语言学习历程——编程练习2——06
5.对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序 例如 3行3列 的二维数组 34,85,72,93,49,28,48,12,43 输出 34, 72, 85 93, 49, 28 12, 43, 48分析:这个题目直接按照题目的意思,找到偶数行奇数行分别排序下面是代码实现:/*******原创 2017-05-02 14:42:05 · 296 阅读 · 0 评论 -
C语言学习历程——编程练习2——05
5. 编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放 然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中 两个字符串中过长的剩余字符接在c指向数组的尾部。分析:主要是交叉合并到c的处理代码如下。下面是代码实现:/****************原创 2017-04-30 12:20:29 · 317 阅读 · 0 评论