
C/C++
文章平均质量分 70
ArchyLi
一个学习路上人。当然还差很多。
展开
-
C语言中二分查找(折半查找)
二分査找也称折半査找,其优点是查找速度快,比较次数少,平均性能好,但是有一个缺点,缺点就是要求所要査找的数据必须是有序序列。该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的原创 2016-12-11 10:51:51 · 7078 阅读 · 1 评论 -
【C++】面向对象类成员函数的重载、覆盖与隐藏
重载:重载就是一个相同的作用域内实现相同的操作,但是操作的对象不相同特征成员函数重载:相同的范围(相同的作用域)函数名字相同参数不同(类型不同,个数不同,顺序不同)注意:返回值类型不同不算函数重载覆盖:覆盖就是面向对象的多态,指的是派生类函数覆盖基类函数。特征:不同的范围(不同的作用域,分别是基类和派生类)参数相同函数名字必须相同原创 2017-03-22 00:21:15 · 491 阅读 · 0 评论 -
【STL】模拟实现vector
本文初步用C++模拟实现vector的一下几个步骤,因为是初步实现,和STL库中的源码还有些不一样,后期会使用类似STL中的vector的三个迭代器再次模拟实现vector。void PushBack(const DataType& data);void PopBack();void Insert(size_t pos, const DataType& data);void Eras原创 2017-03-22 00:46:24 · 968 阅读 · 0 评论 -
智能指针
智能指针1、简介由于在C++中没有自动内存回收机制,所以每次程序员用new申请出来的空间都要靠自己来手动delete释放掉,这时便造成了一个麻烦,程序员很容易忘记delete申请的空间,所以此时造成了内存泄漏。这时我们便使用智能指针来解决这个问题。本文主要对auto_ptr、scoped_ptr、share_ptr三个智能指针进行说明。2、指针内容2.1auto_ptr原创 2017-04-09 17:43:17 · 2585 阅读 · 1 评论 -
atoi()函数实现
atoi()函数是表示把字符串转化成整形的一个函数。atoi()函数的原型:int atoi(const char *npstr)atoi()函数说明:接下来我们看下C语言函数库里面的函数说明,atoi()函数会扫描实参npstr字符串,同时会跳过前面的空白字符,包括空格,tab缩进等,直至遇到正负号或者数字才开始做转化,而遇到非数字或字符串结束(‘\0’)结束转化,原创 2017-03-24 18:53:52 · 886 阅读 · 0 评论 -
模拟实现string
#include using namespace std;#define DEFAULT_CAPACITY 5#pragma warning(disable:4996)class String{public: String(const char*s="")//构造函数 { if (NULL == s) { _pStr = new char[1]; *_pStr原创 2017-03-25 22:41:33 · 535 阅读 · 0 评论 -
memcpy()与strcpy()区别
首先我们来看下memcyy(()memcpy():函数原型:void *memcpy(void *dest, const void *src, size_t n);函数解释;这个函数是把src所指的内存从起始的位置拷贝n个字节到des所指的内存中,这样以来我们就存在了一个问题就是n的大小如果够大,则会覆盖前面dest所指的内存,如果不大,则正常复制。如上原创 2017-03-25 23:54:30 · 571 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.youkuaiyun.com/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2017-03-26 10:15:31 · 449 阅读 · 0 评论 -
递归逆向打印单链表
代码如下:void PrintListFromTailHead(Node* phead){ if (phead) { PrintListFromTailHead(phead->next);//此处开始递归调用 count _data << " "; }}上述程序一共调用五次函数,直到phead->next==NULL时候停止开始返回。原创 2017-04-14 21:00:09 · 1716 阅读 · 0 评论 -
逆向销毁单链表中的各个结点
与逆向打印方式相同,只不过是把打印换成delete。void DestoryList(Node*& pHead)//如果没有引用,外部的指针成为野指针{ if (pHead) { DestoryList(pHead->_next); delete pHead; pHead = NULL; }}原创 2017-04-14 21:06:18 · 635 阅读 · 0 评论 -
递归在单链表中查找某个值为data的结点
首先给出正常的查找方式:LNode *LocateElem(LinkList L, ElemType e) {//本算法查找单链表 L (带头结点)中数据域值等于e的结点指针,否则返回NULL LNode *p = L->next; while (p != NULL && p->data != e) //从第1个结点开始查找data域为e的结点 p = p->next; ret原创 2017-04-14 21:21:19 · 3274 阅读 · 0 评论 -
C语言扫雷
实现代码如下:1、sweep.h#define _CRT_SECURE_NO_WARNINGS 1#ifndef __MINE_H__#define __MINE_H__enum op{ EXIT, PLAY};#include #include #include #include #define COLS 11#define ROWS 1原创 2016-10-26 11:38:00 · 1791 阅读 · 1 评论 -
二分查找的递归实现
我在曾经的博客里写了普通版本的二分查找: http://blog.youkuaiyun.com/archyli/article/details/52810768下面我们来分析下用递归实现二分查找。首先二分查找必须为有序的数组,因为我们需要一个左边的值与右边的值来确定一个范围,同时我们需要传入的数组,还需要一个查找的数,所以一共有四个参数。接着,由于我们是对数组操作,所以首先先要原创 2017-04-14 22:57:26 · 1249 阅读 · 0 评论 -
用递归实现判断一个字符串是否是回文的方法
回文:把相同的字符串颠倒过来,产生首尾回环,叫做回文。例如:1234321、1221、1。注意:单个字符也是回文。下面给出两个版本的判断字符串是否是回文的方法。方法一:递归实现判断一个字符串是否是回文。bool IsPalindereme(char* str, size_t size){ if (size <= 1) return true; if (原创 2017-04-14 23:34:44 · 22258 阅读 · 0 评论 -
【C++】实现对称矩阵以及压缩存储
对称矩阵以及压缩存储对称矩阵就是形容如下矩阵的,本文主要对对称矩阵和对称矩阵的压缩矩阵进行一个简单的实现。 { 0, 1, 2, 3, 4, 5}, { 1, 0, 1, 2, 3 ,4}, { 2, 1, 0, 1, 2 ,3}, { 3, 2, 1, 0, 1 ,2}, { 4, 3, 2, 1, 0 ,1}, { 5, 4, 3, 2, 1 ,0},template<class T原创 2017-04-22 00:30:15 · 2379 阅读 · 0 评论 -
【C++】实现循环队列
循环队列将头尾相接的顺序存储队列称为循环队列,如下图: 代码如下:#include<iostream>using namespace std;template<class T>class Queue{public: Queue(size_t capacity = 5) :_rear(0) ,_front(0) ,_count(0)原创 2017-04-22 00:37:28 · 2150 阅读 · 0 评论 -
【C++】实现图形界面五子棋
图形界面的五子棋就是在普通“黑框框”下面实现五子棋的基础上引用了图形库,本文不在这里介绍相应的图形库。下面给出代码:#include#include#include#include#include #pragma warning(disable:4996)void menu();void play();void display();void pl原创 2017-04-22 15:44:26 · 18076 阅读 · 3 评论 -
【C++】模板与泛型编程
首先我提一个问题,什么是泛型编程?泛型编程:是编写与类型无关的逻辑代码,是代码复用的一种手段。模板是泛型编程的基础。模板又可以分为下面两个:范型,也就是任何类型,也就是不依赖于具体的数据类型通常,我们的操作都是都是依赖于具体的数据类型的,比如int add(int a,int b){ return a+b;}缺点就是只要有新类型出现,我们就要重新添加原创 2017-03-14 18:06:03 · 980 阅读 · 0 评论 -
【C++】冒泡排序的C++实现
C语言的冒泡排序如下:void Bubble_Sort(int arr[], int len) { int i = 0; int j = 0; int temp = 0; for(i = 0; i < len-1; i++) { for(j = 0; j < len-1; j++) {原创 2017-03-20 22:38:09 · 1053 阅读 · 0 评论 -
C语言请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”
题目:请实现字符串循环右移函数。列如字符串“abcdefghi”向右移2位就是“hiabcdefg”。函数原型为:void RightLoopMove(char *pstr,unsigned short steps)函数参数说明: pStr: Point to a ‘\0’ terminated string steps: The rotate shift原创 2016-12-11 10:53:05 · 5962 阅读 · 0 评论 -
C语言递归与非递归实现求第n个斐波那契数
一、非递归实现第N个菲波那切数列:程序如下:#include int fib(int n){ int a1 = 1; int a2 = 1; int a3 = 0; if( n <= 2 ) return 1; else { while(n > 2) { a3 = a1 + a2; a1 = a2; a2 = a3; n--; }原创 2016-11-10 20:49:15 · 3134 阅读 · 0 评论 -
解决_CRT_SECURE_NO_WARNINGS 警告
问题:我们在程序中遇到_CRT_SECURE_NO_WARNINGS 警告信息,让人烦恼。如下我提供了三个解决方式:方法一、右击项目->属性->C/C++->预处理器->预处理器定中添加 _CRT_SECURE_NO_WARNINGS 这个预定义。如下图方法二、打开VS的目录下的 (newc++file.cpp)添加如下文字#defi原创 2016-10-31 17:50:24 · 5249 阅读 · 0 评论 -
写冒泡排序可以排序一个整型数组。
题目:写冒泡排序可以排序一个整型数组。代码如下:#include void Bubble_Sort(int arr[], int len){ int i = 0; int j = 0; int temp = 0; for(i = 0; i < len-1; i++) { for(j = 0; j < len-1; j++) { if(arr[j] > arr[原创 2016-11-20 15:39:18 · 908 阅读 · 0 评论 -
C语言布尔、整形、浮点、指针变量与”零值”比较的if语句
在学习C语言中的if语句中,我遇到了变量与零值进行比较的一些问题,当比较的数值为浮点变量时,不能直接用 if (x == 0.0)或者 if (x != 0.0) ,由于float和 double类型的数据都是有精度限制的,所以0.0000...0001=0(超过一定的精度限制),所以有时候会得到错误的结果。原创 2016-10-16 11:56:55 · 3615 阅读 · 0 评论 -
C语言switch case 语句中能否使用continue 关键字?
在C语言的学习中,我学习到switch case语句,我发现不能使用continue关键字。代码如下:#include int main(){ int a; printf("input integer number: "); scanf("%d",&a); switch (a) { case 1:printf("Monday\n"原创 2016-10-20 20:19:24 · 7346 阅读 · 2 评论 -
使用C语言打印不同星号图案
一、画图方法画一个图,通常可以选择如下方法:1、画每一个图形,填充形状覆盖的像素。2、对于图像中每个像素,采样该像素覆盖了什么形状。第一种就是光栅化(rasterization)算法,第二种包括光线追踪(ray tracing)、光线步进(ray marching)等算法。第二种做法可以理解为设计一个数学函数,这种方式可以用较少的代码画出复杂的形状。如果要输出文本模式,原创 2016-11-19 00:45:26 · 11439 阅读 · 1 评论 -
char的取值为什么是-128~127
首先,我们要知道计算机里面所有的数都是用补码表示的,正数的补码是其本身,负数的补码是原码的反码加一。127这个数值很好理解,char占一个字节(byte),含有8个bit位.我们知道数字在计算机中是以二进制来存储的,最高位是符号位,0为正1为负所以当char表示为正数时:表示的数字有2的七次方 2^7=128个 ,从+0~127。 0 : 0000 00001原创 2016-12-02 23:55:42 · 3370 阅读 · 0 评论 -
简单的通讯录——第一版
实现效果如下图:此C语言通讯录用来存储1000个人的信息,每个成员的信息包括有姓名、性别、年龄、电话、住址。这次我们C语言通讯录V1.0提供的功能有:1、添加联系人2、删除联系人3、修改联系人4、查看所有联系人的信息5、以名字排序所有联系人7、清空所有联系人8、退出系统总体过程实现:首先定义一个结构体,存储其中一位成员的信息,信息包括原创 2016-12-04 17:34:37 · 1039 阅读 · 0 评论 -
简单的通讯录——第二版(动态版)
简单的通讯录——第二版(动态版)实现效果如下:此C语言通讯录和第一版一样,不过是动态增长通讯录的容量来达到存储的目的。同样,我们的通讯录包括了每个成员的信息有性别,年龄,电话和住址。这次我们C语言通讯录V2.0提供的功能有:1、添加联系人2、删除联系人3、修改联系人4、查看所有联系人的信息5、以名字排序所有联系人7、清空所有联系人8、退出原创 2016-12-14 01:14:40 · 628 阅读 · 0 评论 -
顺序表的实现
这篇文章我们来整理下与顺序表有关的内容首先说明一下顺序表的概念: 顺序表是计算机在内存中以数组形式保存的一种线性表,它用一组地址连续的存储单元依次存储数据元素的线性结构。它是一种最简单的数据结构,除了线性表中的第一个和最后一个元素之外,其他元素都是以直线首尾相接。顺序表详解一、定义顺序表中的结构体:typedef struct SeqList{ DataT原创 2017-01-13 22:58:08 · 814 阅读 · 0 评论 -
【C++】复数类的实现
复数类的运算有加减乘除四个,下面我们来逐步分析这几个运算。一·加法运算设z1=a+bi,z2=c+di是任意两个复数,则它们的和是 (a+bi)+(c+di)=(a+c)+(b+d)i;此处需要注意的是返回值的类型为复数complex。二.减法运算设z1=a+bi,z2=c+di是任意两个复数,则它们的差是(a+bi)-(c+di)=(a-c)+(b原创 2017-02-16 20:34:27 · 17156 阅读 · 3 评论 -
【C++】operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载?对于系统的所有操作符,一般情况下,只支持基本数据类转载 2017-02-16 18:57:45 · 683 阅读 · 0 评论 -
【C++】C++中几种测试程序运行时间的方法
关于C++中计算时间的一些总结一、使用GetTickCount()函数GetTickCount()是一个函数,可以把它理解为打点计时器。GetTickCount()是通过计算从函数开始运行计时,直到函数运行结束所求出函数的运行时间。它返回从操作系统启动所经过的毫秒数,返回值:DWORD头文件:winbase.h函数原型:DWORD GetTickCount(void)原创 2017-02-17 10:20:40 · 28743 阅读 · 0 评论 -
结构体在内存中的对齐规则
一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一: #include using namespace std; struct转载 2017-03-18 11:16:04 · 703 阅读 · 0 评论 -
【C++】继承总结
一、继承的概念继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有的类的特性的基础上进行一个扩展,可以增加其功能。二、继承的定义格式三、继承关系与访问限定符总结:1、公有继承基类的成员,全部是基类的成员。2、保护和私有继承基类的成员都变成各自的继承。3、基类的私有成员无法继承。4、使用关键字class时默认的继承方式是private原创 2017-03-19 00:03:25 · 643 阅读 · 0 评论 -
模拟实现日期类
日期类好久没写了,重温一下以前的知识。写日期类需要注意的有:1、日期减日期的计算 2、关于输出输入重载的友元函数声明 3、构造函数的条件判断 4、拷贝构造函数的自我赋值判断实现代码如下:#include <iostream>using namespace std;class Date{public: //4个默认的成员函数 //构造、拷贝构造、赋值语句重载、析构函数原创 2017-10-25 22:20:48 · 487 阅读 · 0 评论