C/C++
文章平均质量分 72
ZinanJau
这个作者很懒,什么都没留下…
展开
-
关于C/C++可变参数
<br />C/C++可变参数例子<br /> <br />#include <stdio.h><br />#include <stdarg.h><br /><br />int proc(char *fmt,...)<br />{<br /> char buffer[50];<br /> va_list ptr;<br /> int num;<br /> va_start(ptr, fmt);<br /> num = vsprintf(buffe转载 2010-06-03 00:13:00 · 626 阅读 · 0 评论 -
关于函数对象和调用操作符
函数对象和调用操作符可以为类类型的对象重载函数调用操作符。一般为表示操作的类重载调用操作符。例如,可以定义名为 absInt 的结构,该结构封装将 int 类型的值转换为绝对值的操作:struct absInt {int operator() (int val) {return val }};这个类很简单,它定义了一个操作:函数调用操作符转载 2012-06-21 18:39:23 · 963 阅读 · 0 评论 -
std::tr1::function
使用std::tr1::function对象代替虑函数在 C++的TR1中(Technology Report)中包含一个function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类的非静态成员函数时。可以参考Scott Meyers. . Item 35.下面具体说明其使用方法。1. 指向全局函数或静态成员函数时转载 2012-06-21 19:45:46 · 812 阅读 · 0 评论 -
表驱动
表驱动方法表是几乎所有数据结构课本都要讨论的非常有用的数据结构。表驱动方法出于特定的目的来使用表,下面将对此进行讨论。程序员们经常谈到"表驱动"方法,但是课本中却从未提到过什么是"表驱动"方法。表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或case)来把它们找出来的方法。事实上,任何信息都可以通过表来挑选。在简单的情况下,逻辑语句往往更简单而且更直接。但随着逻辑链的转载 2012-07-12 11:07:26 · 814 阅读 · 0 评论 -
extern用于数组和指针
中有一示例,文件1中是p的声明,文件2中是p的定义,大致如下:文件1(.h)extern char p[]; (第一种写法,正确) extern char* p; (第二种写法,错误)文件2(.cpp)char p[10]; 如调用p[i],则第二种写法程序会崩溃.你可能会认为数组名就是指针,为什么会崩溃呢?有下面一段解释:p在这里被声原创 2011-08-07 21:06:04 · 5279 阅读 · 3 评论 -
#pragma pack 用法详解
#pragma pack 用法详解pack 为 struct, union和 class等的成员对齐指定字节边界.与编译选项(属性 ->配置属性 -> C/C++ ->代码生成 ->结构成员对齐)的 /Zp开关不同,它不针对整个项目,而仅针对模块,比如一个编译单元. 1. #pragma pack(show) 以警告信息的形式显示当前字节对齐的值.2. #pr转载 2011-06-29 00:00:00 · 1505 阅读 · 0 评论 -
浅谈C/C++内存泄漏及其检测工具
对于一个C/C++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比转载 2012-09-21 14:43:11 · 2446 阅读 · 0 评论 -
C/C++预处理指令
预处理指令 (Preprocessor Directives)预处理指令是我们写在程序代码中的给预处理器(preprocessor)的命令,而不是程序本身的语句。预处理器在我们编译一个C++程序时由编译器自动执行,它负责控制对程序代码的第一次验证和消化。所有这些指令必须写在单独的一行中,它们不需要加结尾的(;)分号。#define在这个教程的开头我们已经提到了一种预处理指令转载 2012-08-13 17:51:09 · 823 阅读 · 0 评论 -
C/C++带括号四则运算
(1).首先从string读入表达式,取出每一个字符后装入deque容器coll1中(源码在后面)。(2).从该容器取出每一个元素,利用栈将中缀表达式转换成后缀表达式(可参考:http://blog.csdn.net/anye3000/article/details/7939203),将后缀表达式装入容器coll3中。(3).最后从coll3中取出元素逐一处理,既使用逆波兰式求值(如下图)转载 2012-09-04 11:26:06 · 20053 阅读 · 2 评论 -
C/C++二进制,八进制, 十进制和十六进制的表示方法
C/C++语言本身支持的三种输入是: 1. 十进制。如56。 2. 十六进制,以0x开头,比如0x7a。输出十六进制hex关键字格式化,如cout3. 八进制,以0开头,比如030。输出八进制用oct关键字格式化,如cout如下示例程序:#includeusing namespace std;void main(){ int a,b,c; a=转载 2012-09-14 00:53:25 · 58537 阅读 · 1 评论 -
欧拉路径, 欧拉回路 USACO Riding the Fences
概念欧拉回路:从图的某一个顶点出发,图中每条边走且仅走一次,最后回到出发点。如果这样的回路存在,则称之为欧拉回路。欧拉路径:从图的某一个顶点出发,图中每条边走且仅走一次,最后到达某一个点。如果这样的路径存在,则称之为欧拉路径。无向图, 欧拉回路存在条件:所有顶点的度数均为偶数。无向图, 欧拉路径存在条件:至多有两个顶点的度数为奇数,其他顶点的度数均为偶数。有向图, 欧拉回路转载 2013-08-29 18:35:22 · 1795 阅读 · 0 评论 -
浅析GCC下C++类对象的内存布局
继承是C++作为OOD程序设计语言的三大特征(封装, 继承和多态)之一, 单一非多态继承是比较好理解的, 本文主要讲解GCC环境下的多重继承和虚拟继承的对象内存布局.一,多重继承先看几个类的定义:class Top{public: int a;};class Left : public Top{public: int b;};class Right : pu转载 2013-12-12 18:23:16 · 2507 阅读 · 0 评论 -
单件类(C++)理解
单件类在任何时候最多只有一个实例对象,因此我们必须保证单件类只能被new一次。可以把类的构造函数声明为private,所以new只能出现在类成员函数中。然后在类内部定义一个静态的函数控制引用次数。原创 2010-03-17 15:56:00 · 5262 阅读 · 2 评论 -
sizeof与strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所转载 2012-02-23 17:06:42 · 934 阅读 · 0 评论 -
C语言常用转义字符表
字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。在C程序中使用转义字符\ddd或者\xhh可以方便灵活地表示任意字符。\ddd为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制ASCII码值。\x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制ASCII码值。使用转义字符时需要注意以下问题:1)转载 2011-12-08 10:52:33 · 1951 阅读 · 0 评论 -
C++中string相关函数
C++ string转载 2010-11-01 18:35:00 · 768 阅读 · 0 评论 -
C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
C++构造函数和析构函数默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!!构造函数构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写转载 2011-06-27 15:54:00 · 7734 阅读 · 1 评论 -
template关键字typename和class的区别,以及模板默认参数
template关键字typename和class的区别问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template class Widget; // uses "class" template class Widget; // uses "typename"转载 2011-06-29 12:00:00 · 7422 阅读 · 0 评论 -
指针的数组,数组的指针
int *pa[5]; //指针的数组,表示(含有5个指向int型的指针的)数组int (*pb)[5]; //数组的指针,表示(pb是一个指向含有5个int型元素的数组的)指针int arr[4][5];pb = &arr[1]; 因为多维数组其实就是数组的数组原创 2011-07-24 01:49:27 · 825 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别一.预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack) — 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序转载 2011-07-16 00:58:25 · 714 阅读 · 0 评论 -
C/C++对数组的引用
所谓数组引用,即指向数组的引用;如: int a[10] ; int (&b)[10] = a ;如果写成: int a[10] ; int* &b = a ;将会报错: cannot convert from int [10] to int *&。或许你会说转载 2011-06-30 22:46:00 · 3110 阅读 · 0 评论 -
C/C++中涉及存储方式的关键字:auto,static,register,extern
auto关键字:auto对象和变量被存储在栈中,它的生命周期仅存在于它的声明所在的块(block)中。在块中定义的块如果不加其它的修饰符则都是auto类型的。auto关键字可以省去。auto对象和变量对外部模块都是不可见的。static关键字:它是C,C++中都存在的关键字,它主转载 2011-07-16 01:18:40 · 1601 阅读 · 2 评论 -
成员函数后面加const,没有const,以及使用的区别
函数后面加const编译器会自动给每一个函数加一个this指针。在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量的(加了mutable修饰的除外,后面有讲)。实际上,也就是对这个this指针加上了const修饰。#include using names原创 2011-07-20 01:10:13 · 14364 阅读 · 2 评论 -
传递动态内存
当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。这些往往会使人受尽折磨,所以如果你想深入C/C++编程,你必须静下心来好好苦一番。现在我们将讨论C/C++里我认为哪一本书都没有完全说清楚,也是涉及概念细节最多,语言中最难的技术之一的动态内存的传递。并且在软件开转载 2011-07-20 21:08:10 · 734 阅读 · 0 评论 -
重载前置,后置(自增运算符 ++ 和自减运算符 --)
如何重载增量运算符 ++ 和 --运算符++和--有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置运算符,使用operator++(int)或转载 2011-07-19 23:27:57 · 17581 阅读 · 0 评论 -
C/C++常用宏定义,注意事项,宏中#和##的用法
总结下宏和函数的不同之处,以供大家写代码时使用,这段总结摘自《C和指针》一书。当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等。下面列举一些成熟软件中常用得宏定义1,防止一个头文件被重复包含 #ifndef COM转载 2011-08-10 17:30:46 · 11383 阅读 · 0 评论 -
C/C++优先级列表
优先级列表PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grou转载 2011-08-10 18:20:31 · 772 阅读 · 0 评论 -
printf,sprintf,vsprintf 区别
有文字模式、命令列C语言程式写作历史的程式写作者往往特别喜欢printf函式。即使可以使用更简单的命令(例如puts),但printf出现在Kernighan和Ritchie的「hello, world」程式中一点也不会令人惊奇。我们知道,增强後的「hello, world」最终还是需要printf的格式化输出,因此我们最好从头开始就使用它。但有个坏消息:在Windows程式中不能使用pr转载 2011-07-08 18:45:23 · 40063 阅读 · 2 评论