
C++
文章平均质量分 75
自由不死
率性而行,适情而止
展开
-
C++实现离散数学求主合取范式和主析取范式
-------YYC#include#include#include#includeusing namespace std;/**说明:* 用!表示 否定* 用& 表示 合取* 用| 表示 析取* 用- 表示 条件* 用~ 表示 双条件*/list> inlist_value_map ;//用于记录所有原创 2013-12-06 17:14:06 · 9641 阅读 · 0 评论 -
C++实现离散数学“五个房子,不同颜色,不同国家...”问题
有五座房子,每座房子的颜色不同,里面分别住着不同国家的人,每个人都有自己养的不同宠物、喜欢喝的不同饮料、抽的不同牌子的烟。现已知以下一些信息:1>英国人住在红色的房子里;2>西班牙人养了一条狗;3>挪威人住在左边的第一个房子里;4>黄房子里的人喜欢抽kools牌的香烟;5>抽chesterfields牌香烟的人与养狐狸的人是邻居; 6原创 2013-12-06 17:02:04 · 4962 阅读 · 0 评论 -
C++实现离散数学中求合式表达式
在输入任何一个合式公式后,该段程序就会自动检测里面的命题变元,并要求为之输入真假值,在输入完毕后就会得出该合式公式的真假值,运用的是递归的思想。----------YYC#include#include#includeusing namespace std;/**说明:* 用!表示 否定* 用& 表示 合取* 用|原创 2013-12-06 17:10:49 · 3022 阅读 · 0 评论 -
C++多态、虚函数浅析
刚才在一朋友空间里看到这篇文章,感觉非常不错,详细的解释了C++中多态和虚函数的实现机制,特转载一下:出自:http://user.qzone.qq.com/1529486906/blog/1386947592 3.3.1 C++多态、虚函数浅析多态(Polymorphism),按字面的意思就是“多种形状”。多态性是允许将父对象设置成为和一个或更多的他的子对象相转载 2013-12-16 22:11:11 · 868 阅读 · 0 评论 -
C++中的对象的赋值和复制
文章出自:http://blog.youkuaiyun.com/qsyzb/article/details/11267739对象的赋值如果对一个类定义了两个或多个对象,则这些同类的对象之间可以互相赋值,或者说,一个对象的值可以赋给另一个同类的对象。这里所指的对象的值是指对象中所有数据成员的值。对象之间的赋值也是通过赋值运算符“=”进行的。本来赋值运算符“=”只能用来对单个的变量赋值,现转载 2014-02-09 18:31:01 · 2457 阅读 · 0 评论 -
C++中的各种小细节(一)
一、多行字面值的处理当处理一个很长的字符串的时候可以换行来写,只需要在第一行的行尾加上一个反斜线符号即可。但是注意:当另起一行的时候不要在该行首添加额外的空格符,因为这些空格符号也会写入该字符串。For Example:std::string a = "asdfgh\zxcv"; std::cout<<a<<std::endl;//结果输出“asdfghzxcv”原创 2014-02-22 17:05:41 · 1319 阅读 · 0 评论 -
C++标准库中bitset类型
虽然在C++的基本类型中,似乎没有二进制这个重要的类型,但是在C++标准库中却提供了能够处理二进制位的有序集合类型,这就是bitset类型,使用该类型时需要先包含该头文件并进行声明:#include using namespace std;该类型存储的是一个有序的二进制数据的集合,该集合的长度值需要在构造该类型时在尖括号中给出(因为该类型实际上也是一种类模版)。一、bitset类原创 2014-02-23 13:13:46 · 1804 阅读 · 0 评论 -
C++中extern关键字使用
文章出自:http://blog.youkuaiyun.com/sruru/article/details/7951019chapter 1 . extern关键字的作用 extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义,来看下面的例子。 [cpp]转载 2014-02-22 15:14:19 · 789 阅读 · 0 评论 -
C++程序员必看书单
转载:http://blog.youkuaiyun.com/ljy1988123/article/details/7748913#comments C++: Prata《C++ Primer Plus》:基础,第一本书。(之前的版本也可,不过推荐最新的) Lippman《Inside C++ Object Model》:初级,加深语言层次上的理解。不过有点小转载 2014-02-22 17:16:22 · 1291 阅读 · 0 评论 -
C++容器适配器
文章出自:http://blog.youkuaiyun.com/thefutureisour/article/details/7751846首先,我们要明白适配器是干什么的?其实就是一个接口转换装置,是得我们能用特定的方法去操作一些我们本来无法操作的东西。举一个例子,比如你的一个设备支持串口线,而你的电脑支持的是usb口,这时候,我们没有必要重新买一个支持usb的设备,只需要一根串口转usb口的小玩意转载 2014-02-10 20:42:47 · 884 阅读 · 0 评论 -
C++中的内存分配
C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放掉,资源将由操作系统在程序结束后自动回收。自由存储区:转载 2014-02-23 20:23:17 · 949 阅读 · 0 评论 -
计算机中带符号的整数为何采用二进制的补码进行存储?
文章出自:出处:http://www.cnblogs.com/dolphin0520/我们都知道在计算机内部数据的存储和运算都采用二进制,是因为计算机是由很多晶体管组成的,而晶体管只有2种状态,恰好可以用二进制的0和1表示,并且采用二进制可以使得计算机内部的运算规则简单,稳定性高。在计算机中存在实数和整数,而整数又分为无符号整数和有符号整数,无符号的整数表示很简单,直接采用其二进制形式转载 2014-02-26 20:57:23 · 1383 阅读 · 0 评论 -
C++中结构体类型(或则类类型)的大小
我们先观察下面的这个结构体,并用sizeof()函数去求该类型的大小。struct TS{ int ma; double mb; char mc;};可能很多人会想该类型的大小就是4个字节+8个字节+1个字节 = 13个字节。可是但实际上结果却是输出24个字节。size_t len; len = sizeof(TS );//作用于类型名 cout<<len<原创 2014-02-26 21:02:04 · 1842 阅读 · 0 评论 -
C++中的强制类型转换
一、C++中旧式的强制类型转换C++中旧式的强制类型转换主要是通过用圆括号来将类型括起来实现的: int a = 3; double b = (int)a;但是这中强制转换的缺点就是转换的可视性是比较差的,难以跟踪错误的转换,在C++中后来为了解决这种问题就引入了命名的强制类型转换符。二、命名的强制类型转换符在C++中命名强制类型转换符一共有一下几种:st原创 2014-02-26 21:06:39 · 2071 阅读 · 0 评论 -
C++中的各种小细节(三)
十一、创建数组的两种形式形式一: #define N 10 int a[N]; int n = 10; int b[n];//编译报错注意这种定义数组的形式有很多缺点,例如:1:数组的长度必须是在编译时就知道的,即数组的长度不能改变,在定义数组指定数组的长度值必须为一个常量值,2:数组只在定义它的语句块内存在,因为这种形式属于是编译器自动在栈内原创 2014-02-26 21:18:54 · 1117 阅读 · 0 评论 -
C++中整型的超范围赋值问题
在C++的标准中,是规定了每一个算术类型的最小存储空间的,但是该标准并不阻止编译器来使用更大的存储空间,而且事实上也正好如此,对于C++的内置类型,几乎所有的编译器都使用了更大的存储空间来存储数据。---yyc在C++中可以理解对象的类型决定了对象的取值范围,但是当我们在C++中试着把一个超出其取值范围的值赋值给该整型对象时,并不会报错,而是编译器根据该类型是signed还是unsig原创 2014-02-14 21:23:27 · 5272 阅读 · 0 评论 -
C++中的各种小细节(二)
六:string::size_type 类型string::size_type 类型对象用来存储string类型中的成员函数size()的返回值。任何存储string的size操作结果的变量必须为string::size_type 类型。特别应该注意的不能把size()的返回值赋值给一个int类型的变量。因为在有些机器上int变量的表示范围太小,甚至无法存储实际并不长的string对象原创 2014-02-26 21:12:29 · 1102 阅读 · 0 评论 -
C++中程序化操作虚函数列表实验
#include#includeusing namespace std;class base {public : int ma; private: virtual int fun1() { cout<<"base: fun1"<<endl; return 0; } virtual void fun2() { cout<<"base: fun2"<<endl;原创 2014-02-27 16:09:22 · 1442 阅读 · 1 评论 -
C/C++浮点数在内存中的存储方式
出处:http://www.cnblogs.com/dolphin0520/任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。但是对于浮点数在内存是如何存转载 2014-02-27 21:05:21 · 843 阅读 · 0 评论 -
C++成员指针
出自:http://www.cnblogs.com/lzmfywz/archive/2012/08/16/2642405.htmlC++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中,如果不用成员指针,编程是非常困难的。 刚遇到这种语法时也许会让你止步不前。但你会发现转载 2014-02-27 23:09:31 · 1010 阅读 · 0 评论 -
成员在类中的偏移量 & 类成员指针
文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) 转载请注明,谢谢合作。---看一道笔试题(引自程序员面试宝典):写出程序输出结果1234567891011121314转载 2014-02-27 23:12:42 · 1341 阅读 · 0 评论 -
C++堆内存和栈内存详解
出自:http://www.open-open.com/lib/view/open1371741339937.html堆:顺序随意 栈:先进后出 堆和栈的区别 一、预备知识 — 程序的内存分配 一个由 c/C++ 编译的程序占用的内存分为以下几个部分 1 、栈区( stack ) — 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈转载 2014-02-28 20:06:53 · 1412 阅读 · 0 评论 -
如何强制访问c++私有成员
出自:http://blog.sina.com.cn/s/blog_01d05ff50100no9q.html前几天笔试adobe,出了这样一个题,当时只想到通过指针的偏移量来访问,但是由于对C++的类对象布局不是很有把握,就随便写了个答案,今天上百度搜了下,发现好几种方法,拿出来一起分享。 先看一个类 #include class A {转载 2014-02-28 17:01:24 · 1435 阅读 · 0 评论 -
C++中引用和指针的区别
下面用通俗易懂的话来概述一下:指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义:引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。见下图,所示引用的含义:2、指针和引用的区别转载 2014-02-28 20:17:49 · 965 阅读 · 0 评论 -
C/C++中volatile关键字详解
出自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Langu转载 2014-02-28 21:55:59 · 929 阅读 · 0 评论 -
C++:获取类成员的偏移量
出自:http://blog.163.com/henan_lujun/blog/static/19538333201078111820803/第一种方式是MFC里使用广泛的宏:对空对象成员取地址#define OFFSET(structure, member) ((int)&((structure*)0)->member);正如我们平时通过某对象的地址指针访问某个成员变转载 2014-02-28 16:39:29 · 4009 阅读 · 0 评论 -
通过偏移量来访问C++类数据成员实验
#includeusing namespace std;class MyClass{public: MyClass() { ma = 12; mb = 32; }public : int ma; int mb;};int main(){ MyClass mc; MyClass * p = &mc; //求出偏移量指针 int MyClass:: * pa原创 2014-02-28 19:32:22 · 1754 阅读 · 0 评论 -
C++中的各种小细节(四)
十五、赋值操作符的右结合性赋值操作符是从右往左结合的,且其返回值是左值。十六、sizeof操作符sizeof操作符的作用是返回一个对象或类型名的长度,注意其返回值类型是size_t类型,长度的单位是字节。使用细节:1:其返回值类型是一个size_t类型,千万不要随意的把返回值赋值给一个int变量。size_t len ;2:当作用于表达式时,该函数其实并没有原创 2014-02-28 22:51:22 · 1048 阅读 · 0 评论 -
线性表(顺序存储)结构与功能的简易实现
"SqList.h"#pragma once#define LIST_INIT_SIZE 10 //初始分配量#define LISTINC 5 //增长量templateclass SqList{public: typedef T ElemType; SqList(void){ elem = (T *)malloc(LIST_INIT_SIZE*sizeof(T));原创 2014-03-02 11:21:11 · 1469 阅读 · 0 评论 -
变量名和内存地址及符号表
1、变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内存中不存在,操作时转换成地址数存放在寄存器中了。其实可以理解为是符号表起到了连接作用。2、符号表 (此段摘抄网上一个课件) 符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。如常数表、变量名表、数组名表转载 2014-03-17 20:03:06 · 2750 阅读 · 0 评论 -
双向循环链表C++实现(完整版)
#includeusing namespace std;/**节点类*/struct DCNode{ int data; DCNode * prior; DCNode * next;};/**链表类*/struct DCList{ DCList() { size = 0; } size_t size;//记录节点数的个数 DCNode * hea原创 2014-03-29 10:58:41 · 8408 阅读 · 0 评论 -
顺序线性表表示一元多项式C++实现
在用线性表来解决一元多项式的相关问题时为了节约存储空间并不需要去存储线性表中的每一项记录,特别是系数项为0的项,所以采用办法是只需存储每一项的系数(非0才存储)和相对应的指数即可。在这种解决办法中的线性表有两种存储结构,一种是顺序存储另一种是线性存储,这两中存储结构对于一元多项式来说各有优缺点,其中顺序存储的线性表的最大的优点是支持快速的随机存储,但不利于修改,特别是增加或原创 2014-03-30 17:07:45 · 6201 阅读 · 1 评论 -
单循环链表C++实现
#includeusing namespace std;struct SLNode //节点类{ int data; SLNode * next;};struct SLList{//链表类型 SLNode * pb;//尾指针 size_t size;//元素个数};void InitList(SLList & list)//初始化一个空的单循环链表{ list.原创 2014-03-28 17:17:49 · 5977 阅读 · 0 评论 -
C++输入输出操作符的重载
操作符的重载有一些规则:1. 重载操作符必须具有一个类类型或枚举类型操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。 如: int operator+(int, int), 不可以 2. 为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数。在某些情况下,程序没有选择,操作符必须是成员;在另外一些情况下,有些经验转载 2014-04-15 23:11:05 · 971 阅读 · 0 评论 -
C++中数字与字符串之间的转换
1、字符串数字之间的转换(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->string char *p = "OK"; string str(p);(3)char * -->CString char *p ="OK"; CSt转载 2014-03-21 08:03:37 · 945 阅读 · 0 评论 -
数据结构栈C++简单实现
#includeusing namespace std;const int MAXSIZE = 100;const int ADD = 10;struct stack{ int * base; int * top; int size; int ability;};void IntStack(stack & sta)//初始化{ sta.base = (int *)mal原创 2014-04-15 22:04:54 · 1204 阅读 · 0 评论 -
行编辑程序、括号匹配检验
行编辑程序、括号匹配检验程序都是利用的栈的数据结构。而这两个小程序也非常好的显示了栈先进后出的思想。由于程序本身很简短、清晰,所以也就不做多的解释了,直接上代码了。行编辑程序:#include#includeusing namespace std;int main(){ stack sta; char ch = getchar(); while(ch!=EOF)原创 2014-05-04 09:00:24 · 1344 阅读 · 0 评论 -
c++随机数
c++随机数生成函数rand(),实质生成伪随机数列。为生成更加随机的数列,需要srand(unsigned num)来播种。常用方式srand((unsigned)time(NULL));//增加头文件生成[a,b]之间的随机整数的方法:1、rand()%(b-a+1)+a;2、a+b*rand()/RAND_MAX;两篇引用博文:第一篇讲了基本的转载 2014-05-04 09:16:59 · 1016 阅读 · 0 评论 -
bitset
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:[cpp] view plaincopy转载 2014-05-04 07:40:51 · 775 阅读 · 0 评论 -
蚁群算法求解迷宫最优路径问题
本段程序的基本思想是利用蚁群算法中的蚁周模型,来对全局的迷宫图进行信息素的跟新和为每一只蚂蚁选择下一个方格。 一共会进行RcMax = 2000轮模拟(理论上模拟的次数越多结果会越接近真实值),而在每一轮中会排除 M = 10只蚂蚁进行探路。同时在算法的回溯思想上采用的是栈的数据结构来实现的。当栈最终为空时则表示无解。但同时这段程序的一缺点就是:由于我没在算法中对每一轮的每只探路蚂原创 2014-05-04 08:50:18 · 8200 阅读 · 3 评论