
C/C++ 小知识
文章平均质量分 71
曲小鑫
我的学习笔记
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
循环链表范例(约瑟夫问题)
从N个人中选出一个领导人,方法如下:所有人排成一个圆圈,按顺序每隔第M个人淘汰出局,然后剩下的人聚拢重新形成圆圈,找出最后剩下的那个人参考:《算法:C语言实现》 P52#include #include typedef int elem_type;typedef struct Node node;struct Node{ elem_type elem; node*原创 2015-01-12 21:00:20 · 624 阅读 · 0 评论 -
C语言堆和堆栈
原文:http://www.cnblogs.com/TonyEwsn/archive/2010/01/29/1659496.html在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身转载 2015-06-28 09:53:43 · 699 阅读 · 0 评论 -
static 、const 、 define 、inline
原文链接:#define和inline 的区别define:定义预编译时处理的宏; 只进行简单的字符替换,无类型检测typedef:定义类型别名 用于处理复杂类型 例: typedef int A; 则:A a; //定义a为intinline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝 既为提出申请,不一定会成功转载 2015-07-28 09:48:10 · 508 阅读 · 0 评论 -
C++ 运算符 优先级
C++ Operator Precedence C++ C++ language Expressions The following table lists the precedence and associativity of C++ operators. Operators are listed top to bott转载 2015-07-30 20:09:56 · 665 阅读 · 0 评论 -
如何求结构体成员的偏移地址 || 结构体的 sizeof 总结
C 语言中允许将值为 0 的变量强制转换成任一类型的指针,转换结果是一个NULL指针;(type*)0 // 一个 type 类型的NULL指针用这个指针访问结构体内的成员是非法的,但是&(((type*)0)->field)是为了计算 field 的地址 ,编译器不会产生访问 field 的代码,只会根据 type 的布局和起始地址在编译期计算这个地址(常量)。而又因为初始地址为 0,故该地址的值原创 2015-08-12 16:22:45 · 3009 阅读 · 0 评论 -
多方法实现 swap 2 个 int 变量的值
最常用方法是用临时变量保存备份值void swap(int &x, int &y){ int temp = x; x = y; y = temp;}不使用临时变量,方法是:按位异或 及 四则运算实现#include <iostream>#include <limits>using namespace std;void swap(int &x, int &y){原创 2015-08-30 20:08:52 · 1124 阅读 · 0 评论 -
C/C++ 实现可变参数的函数
头文件: C #include <stdarg.h> C++ #include <cstdarg>C函数要在程序中用到以下这些宏:void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );va_list: 变长参数列表的原创 2015-08-31 09:11:18 · 961 阅读 · 1 评论 -
memcpy, strcpy, strlen, strcmp, itoa, atoi 的函数实现
不使用库函数,实现 memcpy, strcpy, strlen, strcmp, itoa, atoi. 本文地址 : 1. memcpy内存拷贝函数。 函数原型void *memcpy(void*dest, const void *src, size_t n); // n 为字节数注意问题: 1. 判断输入地址有效性 2. 将src,dst 指针强制转换成字符型指针,逐字节复制 3.原创 2015-08-31 16:50:38 · 1347 阅读 · 0 评论 -
二分查找的递归和非递归实现,二分查找的扩展
凡是有序数组中的查找问题,都应该联系二分查找解决1. 递归实现// 递归二分查找int BinarySearch(int nums[], int left, int right, int key) { if (left > right) { return -1; } int mid = left + ((right - left) >> 1); if原创 2015-08-31 22:24:52 · 1727 阅读 · 0 评论 -
负数的带符号和不带符号的右移运算
原文链接:http://smufvgwy.iteye.com/blog/987608负数的移位操作和正数不一样,负数是按补码移位。当涉及到负数的移位时,一定要细心。左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变负数的带符号和不带符号的右移运算博客分类: Java基础ITeyeJ# 多年没用过很基础的东西,对这些移位转载 2015-08-05 16:37:48 · 3237 阅读 · 0 评论 -
64 - 数据流中的中位数 || STL 堆
题目: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路解析数据是从数据流读出,因此数组的个数是再逐渐的增加。如何选用一个容器,能够存储数据,并能够给出中位数。无序数组:插入O(1) partation操作找出中位数 O(n)有序数组:插入O(n) 找出原创 2015-08-02 17:12:14 · 1855 阅读 · 0 评论 -
C/C++ 中的特殊关键字:volatile, register, restrict, __attribute__
1.volatile: 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址(内存)中读取,而不会使用寄存器中的缓存值;volatile int i=10; 2.register: 使用修饰符register声明的变量属于寄存器存储类型。该类型与自动存储类型相似,具有自动存储时期、代码块作用域和内连接。声明为register仅仅是一个请求,因此该变量仍然可能是普通的自动变量。无论哪种情况原创 2015-08-19 14:53:20 · 1980 阅读 · 0 评论 -
C++ 运算符重载的注意点
运算符重载包括:双目运算符重载、单目运算符重载、流运算符重载、转换构造函数、类型转换函数重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) { // 对运算符的重载处理 }1. 双目运算符重载双目:有2个操作数的运算符 重载函数可以为类成员函数或者是类的友元函数: - 当是成员函数时,有一个隐藏参数(当前类),因原创 2015-06-25 19:39:55 · 887 阅读 · 0 评论 -
C++中的 const 全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2015-01-09 17:30:41 · 489 阅读 · 0 评论 -
C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
原文链接: http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html 本文对原文略有修改。学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)1、cin 2、cin.get() 3、cin.getlin转载 2015-06-19 10:01:29 · 919 阅读 · 0 评论 -
打印小于N的所有素数(埃拉托色尼筛法)
打印小于N的所有素数(质数)程序功能为:如果自然数 i 为素数,则设 a[ i ] = 1, 否则 a[ i ] = 0.1)首先把数组中的所有元素设为1,假设所有数都不是素数。2)然后把数组中所有对应索引 处的元素设为0. 3)最后a[ i ]仍为1的即为素数#include #include #define N 1000 //素数范围int main()原创 2015-01-12 20:57:59 · 1203 阅读 · 0 评论 -
二维数组如何作为函数的参数传递
二维数组在内存中使按数组的排列规则存储(按行存放),因此在函数原型中的二维数组的形参必须给定列的大小对于如下数组int main(){ int a[3][2] = {1,2,3,4,5,6}; print1(a); return 0;}错误范例:void print1(int **b)void print1(int b[3][])没有给定列的大小,编译器不原创 2015-02-04 22:09:44 · 1635 阅读 · 1 评论 -
字符串基本处理操作:数组和指针实现 —— 不调用string函数库
自己手动实现的字符串基本处理操作索引数组版本 array_mode.h//统计长度int strlen1(const char s[]){ int i; for(i = 0; s[i] != 0; i++); return i;}//Copychar* strcpy1( char s2[], const char s1[]){ int i; for(i = 0; (s原创 2015-01-20 16:06:32 · 666 阅读 · 0 评论 -
C语言中的关键字 static
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以及每次函转载 2014-12-31 09:50:12 · 609 阅读 · 0 评论 -
c++多个源文件共用一个全局变量(extern 的用法)
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h。 需要定义一个全局变量供这些源文件中使用:方法如下 1、在 state.h声明全局变量: extern int a; 2、在state.cpp中定义该全局变量:int a = 10; 这样其它源文件就可以使用该变量啦转载 2015-04-15 09:34:23 · 2848 阅读 · 0 评论 -
数据类型的溢出
1. 如何自己计算得到边界值 注:整数常量的数据类型默认为:能表示该数的最小数据类型。 以下从小到大排列,选择表中能够表示该整数常量的第一个数据类型(如 8 选 int,2^32+10 选 long int) - 10进制常量可选:int, long int, long long int - 8进制或16进制常量可选:int, unsigned int,long int,unsigned原创 2015-05-03 10:35:35 · 3278 阅读 · 0 评论 -
STL 栈,队列,优先队列用法 c++
1 STL 中栈的使用方法(stack)#include stack>基本操作:push(x) 将x加入栈中,即入栈操作pop() 出栈操作(删除栈顶),只是出栈,没有返回值top() 返回第一个元素(栈顶元素)size() 返回栈中的元素个数empty() 当栈为空时,返回 true2 STL 中队列的使用(queue)转载 2015-05-13 16:49:41 · 1251 阅读 · 0 评论 -
C语言程序的存储区域--内存布局
C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。 C语言编写的程序经过编译-连接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储转载 2015-01-09 16:35:18 · 839 阅读 · 0 评论 -
内存泄漏以及常见的解决方法
之所以撰写这篇文章是因为前段时间花费了很大的精力在已经成熟的代码上再去处理memory leak问题。写此的目的是希望我们应该养成良好的编码习惯,尽可能的避免这样的问题,因为当你对着一大片的代码再去处理此类的问题,此时无疑增加了解决的成本和难度。准确的说属于补救措施了。1. 什么是内存泄漏(memory leak)? 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况转载 2015-05-07 10:05:26 · 6494 阅读 · 1 评论 -
如何解决内存泄露:笨方法手动调试
上篇文章介绍了内存泄露以及避免方法,本篇文章介绍当内存泄露发生时,如何解决1. 笨方法手动调试1 检查代码是否每一个new、malloc 都有对应的 delete、free 2 观察有哪些可能分配内存和释放内存的代码,在其上下添加断点,以debug模式运行3 打开任务管理器,查看调试程序的内存占用,4 逐个排除: - 看运行哪些语句时内存占用增加 - 看运行释放内存语句后原创 2015-05-07 10:33:16 · 876 阅读 · 0 评论 -
C/C++ 代码规范: 命名规则、注释、格式
摘抄精简Google 开源项目风格指南:http://zh-google-styleguide.readthedocs.org/en/latest/contents/一. 命名规则永远不要使用单词缩写(如count写成cnt)C/C++ 代码规范: 命名规则、注释、格式变量名: 小写字母,下划线连接,一般用名词,如error_count 类的成员变量以下划线结尾,如my_exciting_memb原创 2015-05-15 10:08:09 · 6258 阅读 · 0 评论 -
C/C++ 知识点总结
静态编译与动态编译malloc和new的区别关于STL中的map和hash_mapSTL 中的 set 和 mapstatic作用extern 的作用struct 和 class 区别堆 和 堆栈内存重载Overload Override 和 Overwrite排序算法的时空复杂度稳定性分析如何选择排序算法CC内存泄露和检测7JAVA的垃圾回收机制C派生类对象的初始化如原创 2015-09-30 21:49:54 · 11797 阅读 · 3 评论