
C/C++
局外人Lee
这个作者很懒,什么都没留下…
展开
-
经典排序算法总结(C语言)
1.常见算法分类十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入排序和希尔排序)、选择类排序(简单选择排序和堆排序)、归并排序(二路归并排序和多路归并排序);(2)线性时间非比较类排序:计数排序、基数排序和桶排序。总结: (1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要...原创 2018-07-25 18:45:10 · 285 阅读 · 0 评论 -
运算符的优先级
优先级 操作符 描述 例子 结合性 1 () [] -> . :: ++ -- 调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用域操作符 后置自增操作符 后置自减操作符 (a + b) / 4; arra...原创 2018-09-12 00:05:32 · 253 阅读 · 0 评论 -
统计二进制数中“1” ,“0”的个数
//统计二进制数中“1”的个数,用如下代码int fun(int value){ int cnt = 0; while(value) { cnt++; //消除所有1,变成0 value = value & (value - 1); }} //统计二进制数中“0”的个数,用如下代码int fu...原创 2018-09-12 00:09:07 · 1811 阅读 · 3 评论 -
c++实现MD5加密
简单说明一下MD5的处理步骤:MD5以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由四个32位分组组成,将它们级联形成一个128位散列值。①如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为 N*512+448(bit)也就是说我们将一组信息分成n个...原创 2018-09-18 22:03:33 · 490 阅读 · 0 评论 -
C++智能指针shared_ptr讲解与使用
手动管理的弊端在简单的程序中,我们不大可能忘记释放 new 出来的指针,但是随着程序规模的增大,我们忘了 delete 的概率也随之增大。在 C++ 中 new 出来的指针,赋值意味着引用的传递,当赋值运算符同时展现出“值拷贝”和“引用传递”两种截然不同的语义时,就很容易导致“内存泄漏”。手动管理内存带来的更严重的问题是,内存究竟要由谁来分配和释放呢?指针的赋值将同一对象的引用散播到程序各处,...原创 2018-10-05 20:45:52 · 14300 阅读 · 5 评论 -
C++智能指针auto_ptr使用讲解
auto_ptr是C++98标准库提供的一个智能指针,但已被C++11明确声明不再支持。auto_ptr具有以下缺陷:auto_ptr有拷贝语义,拷贝后源对象变得无效,这可能引发很严重的问题;而unique_ptr则无拷贝语义,但提供了移动语义,这样的错误不再可能发生,因为很明显必须使用std::move()进行转移。#include <iostream>#include ...原创 2018-10-05 21:52:57 · 1571 阅读 · 0 评论 -
vector扩容原理说明
扩容原理概述新增元素:Vector通过一个连续的数组存放元素,如果集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素;对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了 ;初始时刻vector的capacity为0,塞入第一个元素后capacity增加为1;不同的编译器实现的扩容方式不一样,V...原创 2018-10-07 19:17:32 · 5136 阅读 · 0 评论 -
进程间通信的方式总结(特点,以及code demo)
进程间通信(IPC,InterProcess Communication):是指在不同进程之间传播或交换信息。一、简单的进程间通信:命令行:父进程通过exec函数创建子进程时可以附加一些数据。环境变量:父进程通过exec函数创建子进程顺便传递一张环境变量表。信号:父子进程之间可以根据进程号相互发送信号,进程简单通信。文件:一个进程向文件中写入数据,另一个进程从文件中读取出来。命令行...原创 2018-10-08 19:50:39 · 9123 阅读 · 1 评论 -
TCP的三次握手与四次挥手(详解+图片)
1、TCP与UDP?1.1、概述传输控制协议(TCP)是一个比较复杂的协议。主要特点如下:(1)TCP是面向连接的运输层协议。也就是说,在使用TCP协议之前,需要建立TCP连接,当传输数据完毕,必须释放已经建立的TCP连接。(2)每一条TCP连接只能是点对点的。(3)TCP协议是可靠交付的服务。通过TCP连接传输的数据,无差错,不丢失,不重复,并且按顺序到达。(4)TCP提供全双工通信...原创 2018-10-09 19:19:08 · 973 阅读 · 1 评论 -
防止头文件被多次包含
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一:#ifndef __SOMEFILE_H__#define __SOMEFILE_H__... ... // 一些声明语句#endif方式二:#pragma once... ....原创 2018-11-06 11:02:58 · 607 阅读 · 0 评论 -
Windows 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerf...转载 2018-11-20 17:47:44 · 859 阅读 · 0 评论 -
随机生成一组彩票
/** 随机生成一组球号 红色: 1-33 蓝色: 1-16* @author 李政 &lt;1244109467@qq.com&gt;*/#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;stdbool.h&gt;#include&lt;time.h&gt;原创 2018-08-24 20:12:04 · 4417 阅读 · 0 评论 -
输出任意阶层的螺旋数组(c语言)
/** 根据输入的 m n 显示螺旋数组* @author 李政 &lt;1244109467@qq.com&gt;*/#include&lt;stdio.h&gt;#define N 20//行:m 列:nvoid matrx(int a[][N],int m,int n){ int d,x=0,y=0; int right,left,up,do...原创 2018-08-24 19:33:21 · 1274 阅读 · 1 评论 -
C语言 实现长整数的相加
/** C语言 实现长整数的相加* @author 李政 <1244109467@qq.com>*/#include <stdio.h>#include <string.h>#define MAXLEN 1000void longadd(char* s1,char* s2 ,int* s3){ int arr1[MAXLEN...原创 2018-08-24 09:19:00 · 8882 阅读 · 0 评论 -
成员函数的重载、覆盖与隐藏(详细)
成员函数的重载、覆盖与隐藏成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。重载与覆盖成员函数被重载的特征: (1)相同的范围(在同一个类中) (2)函数名字相同 (3)参数不同 (4)virtual 关键字可有可无覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分...原创 2018-08-10 20:48:20 · 4329 阅读 · 2 评论 -
基类的继承,虚函数,覆盖和隐藏
一、类与类之间关系:1、类与类之间可能会存在共性。2、类与类之间必定会有差异。3、为了节约开发时间和代码量,我们在设计类时可以把类的共享代码,抽象出来形成一个基础类(基类)。4、使用基类+差异生成一个新的类的叫派生类二、继承的语法1、在设计一个类时如果已有的类中有它需要的成员,它可以从已有的类中继承哪些成员,被继承的类叫父类或基类,继承类叫作派生类或子类。cl...原创 2018-08-10 20:51:59 · 2896 阅读 · 3 评论 -
c++、虚函数、强制类型转换、多态
一、虚函数、覆盖、多态虚函数:成员函数在定义时添加了 virtual 关键字,这种函数叫虚函数。覆盖:如果在子类中实现与父类中的虚函数具有相同的函数,那么子类中的成员函数会覆盖父类中的成员函数。多态:如果子类中的成员函数对父类中的成员进行了覆盖,当一个指向中子类的父类指针或引用了子类的父类引用,当使用它调用虚函数,然后根据实际的调用对象调用子类中的覆盖函数,而不是父类中了虚函数,这种语法...原创 2018-08-13 20:52:58 · 1849 阅读 · 0 评论 -
大数运算之100的阶乘(c语言实现)
/** 100以内的阶乘(还可以更大,只需把arr[256]调到更大)* @author 李政 &lt;1244109467@qq.com&gt;*/#include &lt;stdio.h&gt;void factorial(int n, char *pout){ if(pout == NULL) { return; } i...原创 2018-08-26 19:28:31 · 10056 阅读 · 3 评论 -
n皇后问题 --两种方法解决(c语言实现)
/** n皇后问题 n个皇后两两不在一行,不在一列,不在同意对角线上* 两种方法: 1、暴力法 2、回溯法* @author 李政 &amp;lt;1244109467@qq.com&amp;gt;*/#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdbool.h&amp;gt;#include &amp;lt;mat原创 2018-08-26 19:50:02 · 20684 阅读 · 2 评论 -
求最大公约数,最小公倍数(c语言多种方法实现)
/** 最大公约数:辗转相除法实现 辗转相减法实现 穷举法实现* 最小公倍数:穷举法实现* @author 李政 &amp;lt;1244109467@qq.com&amp;gt;*/#include&amp;lt;stdio.h&amp;gt;int x,y,temp;//最大数的交换函数int max(int *x,int *y){ if(*x &amp;lt; *y) {原创 2018-08-26 20:23:53 · 16087 阅读 · 3 评论 -
C++中sring有关函数的使用方法(加使用的例子)
1、字符串的基本用法2、字符串的基本运算3、字符串的大小和容量4、字符串的拼接5、在字符串中搜索特定的字符6、在字符串中提取子字符串7、访问字符串中的单个字符8、字符串的查找与替换9、字符串的比较与排序10、字符串的插入与删除11、字符串的交换与复制1、字符串的基本用法/* 字符串的基本用法主要是指字符串类对象的定义与初始化方...原创 2018-08-22 23:28:59 · 1929 阅读 · 0 评论 -
c++ 重载及相关知识详细讲解
一、操作符函数在C++中,编译器有能力把一个由数据、对象和操作符共同组成的表达式,解释为对一个全局或成员函数的调用。该全局或成员函数被称为操作符函数,通过重定义操作符函数,可以实现针对自定义类型的运算法则,并使之与内置类型一样参与各种表达式。二、双目操作符表达式 成员函数 形如L#R双目操作符表达式,将被编译器解释为 L.operator#(R)a-b+c ...原创 2018-08-22 23:30:43 · 202 阅读 · 0 评论 -
c++ 重载运算符的详细使用例子
#include <iostream>#include <stdlib.h>using namespace std;class Point{ int x; int y; //friend Point operator + (Point& a,Point& b); friend ostream& operat...原创 2018-08-22 23:34:05 · 950 阅读 · 0 评论 -
c语言实现memcpy函数 (考虑内存重叠以及指针的强制转换)
#include <stdio.h>#include <assert.h>void* my_memcpy(void* dest, const void* src, size_t count){ assert( dest != NULL || src != NULL); char* d; const char* s; //地址重叠 ...原创 2018-08-22 23:38:25 · 1252 阅读 · 0 评论 -
C++中SendMessage与PostMessage的区别
Send有发送的意思,而Post具有投寄的意思。 联想一下现实生活中我们写信(很久很久以前。。。。)来记就很简单了:Send: 相当于邮寄员,他会将快件亲手交给收件人,并且需要收件人签字,他才闪人。而在消息机制中,就是说,系统(邮寄员)会将收到的消息(邮局分发)直接发送到某个窗口的窗口过程(收件人),并且需要该窗口作出处理(收件人签字)才返回。 这东东就是SendMessage。Post...原创 2018-11-19 17:32:59 · 1727 阅读 · 0 评论