
C&C++
文章平均质量分 87
拳四郎
拳四郎
展开
-
单链表中一个插入操作的分析
首先看链表的结构:p- >节点->节点....(单向),结点包括两部分,值value和指向下一节点的指针link,p为根节点,只有指针域,其类型为指向节点的指针,如要对其进行修改,调用函数时就要将其地址传给函数当实参,及函数的形参类型应为指向指针的指针。 当在进行一些链表的操作时,如节点的插入,把一个节点插入到链表的起始位置必须作为一种特殊情况进行处理,因为我们要修改的是指向指针的指针,对于其原创 2010-05-05 00:30:00 · 2448 阅读 · 0 评论 -
再学C++ Primer(12)- C++中的高级内存管理
C++ primer的最后一章,虽说是高级主题,但其实是一些非常有用的东西,包括内存分配,RTTI,volatile等等。new/deleteC++中内存方面最常用的就是new表达式和delete表达式。string *sp = new string("fucku");实际上发生了三件事:1)调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象;原创 2014-02-13 16:00:07 · 2795 阅读 · 0 评论 -
C语言中指针的几点注意
最近在看《C语言深度剖析》,发现里面的东西还是挺有用的,特别是以前脑海中C语言中一些不清晰的部分作者都一一指出了,对与深入学习C和找工作方面都有帮助。 今天要记录一些指针方面的东西,包括数组名和数组名的地址,指针数组和数组指针,函数指针的用法。原创 2013-11-09 08:06:54 · 2518 阅读 · 0 评论 -
再学C++ Primer(9)-顺序容器
顺序容器:vector: 支持快速随机访问;list:支持快速插入/删除,类似与链表deque:爽端队列。使用默认构造函数能达到最佳运行时性能,并使容器更易使用。将一个容器初始化为另一个容器的副本:vector ivec;vecror ivec2(ivec);容器类型和元素类型都必须相同。接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不原创 2012-03-26 10:10:22 · 1451 阅读 · 0 评论 -
再学C++ Primer(11)-模板与泛型编程
泛型编程与面向对象编程一样,都依赖于某种形式的多态性。面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或者参数式多态性。在泛型编程中,我们所编写的类和函数都能多态地用于跨越编译时不相关的类型,一个类或者一个函数可以用来操纵多种类型的对象。标准库中的容器、迭代器和算法是很好的泛型编程的例子。模板是泛型编程的基础。模板函数的例子首先来看一段用于原创 2013-03-22 12:55:39 · 2113 阅读 · 4 评论 -
C语言中的auto,register,volatile,extern,static,const
你能很随意地说出C语言中 auto,register,volatile,extern,static,const这几个关键字的含义和用法么?原创 2013-10-29 23:30:21 · 3551 阅读 · 1 评论 -
考研复习(11)-生产者消费者问题
//c语言描述semaphore mutex=1;//mutex:互斥地访问缓冲池;semaphore empty=n;//剩余空间semaphore full=0;//生产好的商品数producer()//生产者进程{while(1){produce a productwait(empty);//请求一个空间wait(mutex);//原创 2011-11-21 08:04:18 · 2414 阅读 · 0 评论 -
c语言中栈的分配(挖个坑)
大家都知道在c语言的运行过程中,局部变量都是存放在栈中的,且是从高位到低位进行进行空间分配。但是最近遇到一个程序还是让我有点小困惑。先看一个程序。很明显,地址从高到低分配,和预计的一样。稍微修改一下,再运行。很明显,从低位到高位!!!明确一下问题:栈区会应为局部变量的占内存的大小更改内存的分配方式。为什么?为什么?为什么?原创 2013-05-06 13:21:57 · 3345 阅读 · 0 评论 -
C++ 从零单排(5)- ACM三和总结
继续干!List the Bookshttp://acm.zju.edu.cn/网上第 2727 题以书名、出版年份和价格为关键词,按照排序标准把书进行排序。注意:Name 是第一排序标准,Year 是第二排序标准,Price 是第三排序标准。思路:定义书的结构体,首先把书的信息读到vector中,然后分别定义三个Compare方法。#inclu原创 2013-05-04 21:28:14 · 1928 阅读 · 0 评论 -
C++ 从零单排(3)-ACM一
先看昨天的成果:勉强冲进前50.今天花点时间做一些ACM的水题。1.菲波那且数列菲波那契(Fibonacci)数(简称菲氏数)定义为:⎧ f (0) = 0⎪⎨ f (1) = 1⎪ f (n) = f (n − 1) + f (n − 2) (n > 1且n ∈ 整数)⎩如果写出菲氏数列,则应该是:0 1 1 2 3 5 8 1原创 2013-05-01 21:52:23 · 2398 阅读 · 1 评论 -
C++ 从零单排(2)-基础知识二
首先来看一下今天的成绩:虽然没到三百,但是还是有进步。今天的目标是350。继续记录一下C++里遇到的盲点。静态成员分为静态数据成员和静态函数成员。静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。 静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静原创 2013-04-30 13:05:25 · 2034 阅读 · 3 评论 -
三种单例模式的C++实现
简介单例模式应该是原创 2014-03-03 22:17:15 · 3936 阅读 · 2 评论 -
构造函数语意学和Data语意学
此篇为>读书笔记。构造函数语意学默认构造函数对于classX,如果没有任何user-declared constructor,那么会有一个default-constructor被暗中声明,一个被暗中声明出来的作出的行为是无法定义的。本世纪两个最大的两个误解1.任何class如果没有定义default constructor都会被合成一个出来。2.编译器合成出来的default constructo原创 2014-03-17 11:06:55 · 2284 阅读 · 0 评论 -
三种工厂模式的C++实现
引出工厂模式的设计问题◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码。这里带来两个问题:客户程序员必须知道实际子类的名称(原创 2014-03-05 11:36:02 · 37884 阅读 · 26 评论 -
用C++实现一个Log系统
提要最近在写一些C++的图形代码,在调试和测试过程中都会需要在终端打印一些信息出来。之前的做法是直接用std::cout这样做其实非常的麻烦,每次都要打很多的字母还有特殊符号,除去我要打印的内容,还需要按下28下键盘,简直不能忍!参考Unity里面的打log的方式Debug.Log("Some Word");或者Qt中的处理方式qDebug() 这两种都方便太多。今天要实现的Log系统需要满足的特原创 2015-12-13 01:14:43 · 5235 阅读 · 4 评论 -
Free Image简单使用
FreeImage简介FreeImage is an Open Source library project for developers who would like to support popular graphics image formats like PNG, BMP, JPEG, TIFF and others as needed by today's multimedia appl原创 2015-03-04 16:55:57 · 11493 阅读 · 2 评论 -
Visual Studio中Debug和Realse版本编译的结果不同
提要 最近用Visual Studio用的比较多,虽然慢了点,但是用着熟了感觉还是不错的,特别是2013里面的自动格式化代码,对我这种代码整洁强迫症患者真是莫大的帮助。 但是,今天这个坑摸了差不多一天才出来。 环境:Win8.1 64bit Visual Studio 2013 Qt5.3Debug和Release版本的区别Debug通常称为调试版本,它包含调试信息,并且不作任何优原创 2014-11-01 15:33:58 · 5794 阅读 · 1 评论 -
Linux网络编程一站式学习
提要 网络编程所原创 2014-10-22 22:14:00 · 2535 阅读 · 0 评论 -
空间向量类Vector3的C++实现
double getDree( Node a, Node b ) { //求向量a,b之间的夹角 double c, d; c = a.x*b.x + a.y*b.y + a.z*b.z; d = sqrt(a.x*a.x + a.y*a.y + a.z*a.z) * sqrt(b.x*b.x + b.y*b.y + b.z*b.z); return acos(c/d);}原创 2014-09-02 15:00:44 · 6014 阅读 · 0 评论 -
function语意学和析构函数语意学
Point3d obj;Point3d *ptr = &obj;下面的区别:obj.normalize();ptr->normalize();原创 2014-03-20 17:21:01 · 2099 阅读 · 0 评论 -
STL源码剖析(一) - 内存分配
Allocaorallocator 指的是空间配置器,用于分配内存。STL中默认使用SGI STL alloc作为STL的内存分配器,虽然未能符合标准规格,但效率上更好。SGI STL也定义有一个符合标准,名为allocator的配置器,但SGI自己从未使用过它,主要原因是它只把C++的new操作符和delete操作符做了一层薄薄的封装。C++的new操作符和delete操作符进行内存配置时,ne原创 2014-04-21 17:06:51 · 2423 阅读 · 0 评论 -
STL源码剖析(二) - 迭代器与traits技法
提要先看一段用迭代器的代码:int a[] = {1, 2, 3, 4, 5};vector v1( a, a+5);vector::iterator iter = v1.begin( ); for (; iter != v1.end( ); ++iter){ cout << *iter << " ";}coutSTL的中心思想在于:将数据容器(containers)和算法(algo原创 2014-04-23 11:04:33 · 2428 阅读 · 0 评论 -
Google 开源项目风格指南阅读笔记(C++版)
虽说是编程风格指南,但是干货也不少,很多C++的实用技术在里面。头文件通常每一个.cpp文件都对应一个.h文件;#define保护所有头文件都应该使用#define防止头文件被多重包含,为保证唯一性,头文件的命名应该依据所在项目源码树的全部路径。能用前置声明的地方尽量不用#include当一个头文件被包含的同时也引入了新的依赖,一旦该头文件被修改,代码就会被重新编译,如果这个头文件又包含了其他头文原创 2014-04-20 10:37:34 · 2279 阅读 · 0 评论 -
C++ 从零单排(4)- ACM二
继续刷水题!!!这次要搞zoj的题目,Let's go!Quicksumhttp://acm.zju.edu.cn/网上第 2812 题Quicksum 是一行字符串(数据包)中每个字符的位置与该字符的值的乘积之和。空格的值是 0,字母的值等于它在字母表中的位置。所以,A 的值是 1,B 的值是 2,依此类推,Z 的值是 26。下面两个例子是求“ACM”和“原创 2013-05-03 22:24:55 · 2068 阅读 · 0 评论 -
C++ 从零单排(1)-基础知识一
最近发现一个挺有意思的东西,一问一答-http://wenda60.com/。我这水平也就敢冲一下C++了,下面是一些记录。默认this指针this指针是一个特殊的指针,当类的某个非静态的成员函数在执行时,就会存在this指针。它指向类的一个对象,且这个对象的某个成员函数正在被调用。this指针的名字始终是this,而且总是作为隐含参数传递给每一个被声明的成员函数。实际原创 2013-04-29 15:33:01 · 1950 阅读 · 0 评论 -
C语言中的位运算和逻辑运算
位运算C语言中的位运算包括与(&),或(|),亦或(^),非(~).下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数)。#include#include//print a int in binaryvoid bit_print(int a){ int i; int n=16; int mask = 1 << (n-1); for(i = 1;原创 2013-03-25 09:26:34 · 3869 阅读 · 0 评论 -
再学C++ Primer(10)-面向对象编程
基类通常应将派生类需要重定义的任意函数定义为虚函数。virtual只在类内部的成员函数声明中出现,不能在类定义体外部出现的函数定义上。使用virtual的目的是启动动态绑定。继承层次的根类一般都需要定义虚析构函数。派生类一般会重定义所继承的虚函数。如果派生类没有重定义某个虚函数,则使用基类中定义的版本。派生类重定义虚函数时,可以使用virtual保留字,但不是必须。派生类对原创 2012-11-14 16:34:28 · 1619 阅读 · 0 评论 -
再学C++ Primer(8)-标准IO库
没看懂,以后上。2012-3-26C++的输入输出由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写。主要有下面几个类型:iostreamistream从流中读取ostream:写到流中去iostream:对流进行读写;从istream和ostream派生而来fstreamifstream:从文件中读取;由istream派生of原创 2012-03-26 10:11:06 · 1849 阅读 · 6 评论 -
再学C++ Primer(5)-表达式
在求模或取余中如果有一个操作数是负数,这两种操作的结果取决于机器。若仅靠左操作数的值无法确定该逻辑表达式的结果,才会求解其右操作数的值-短路求值。关系操作符具有左结合性,如if(i移位操作的右操作数不可以是负数,而且必须是严格小于左操作数位数的值。bitset的用法: 作用:方便地管理一系列的bit位而不用程序员自己来写代码。初始化方法:原创 2012-03-11 17:08:58 · 1396 阅读 · 0 评论 -
再学C++ Primer(4)-数组和指针
现代C++程序应尽量使用vector和迭代器类型,而尽量避免使用低级的数组和指针。设计良好的程序只有在强调速度是才在类实现的内部使用数组和指针.声明一个指针后一定记得初始化,没地方指就初始化为0.void*可以保存人格类型对象的地址。指针和引用的比较:相同:间接访问另一个值。不同:1)引用总是指向某个特定对象,定义时就得初始化;2)赋值行为的差异:引原创 2012-03-09 19:23:21 · 1436 阅读 · 0 评论 -
再学C++ Primer(7)-函数
不适宜复制实参的情况:1)当需要在函数中修改实参的值时;2)当需要以大型的对象作为实参时;3)当没有办法实现对象复制时; 使用引用形参返回额外的信息#include #include using namespace std;//函数说明:找出范围内特定的值出现的次数,并返回第一次出现的迭代器vector::const_iterator findVal(v原创 2012-03-25 21:02:38 · 1485 阅读 · 0 评论 -
再学C++ Primer(3)-标准库类型
第三章主要说了string类和vector容器。1.string类的输入操作:.读取并忽略开头所有的空白字符(空格,换行,制表);.读取字符直至再次遇到空白字符,读取终止,如:string s1,s2;cin>>s1>>s2;cout输入“ Hello World ”输出将是 “HelloWorld”2.任何存储string的size()操作的变量必须原创 2012-02-22 10:07:41 · 1558 阅读 · 0 评论 -
再学C++ Primer(2)-变量与基本类型
这一章主要介绍了c++中的基本数据类型,还有一些编程的技巧。记录有如下几点:1.通过增加后缀,能够强制将字面值整数常量转换为long或unsigned,unsigned long类型,如1L /*long*/小数点后加L表示扩展精度。2.声明和定义的区别:定义用于为变量分配存储空间,还可以为变量指定初始值,声明用于向程序表明变量的类型和名字。变量必须且仅能定义一次,而且原创 2012-02-17 16:49:53 · 1525 阅读 · 0 评论 -
再学C++ Primer(1)-快速入门
第一章是快速入门,书上写了几个简单例子来引导初学者的,不过还是有几个地方需要注意:1.每个c++程序必须含有卖弄函数,且main函数是唯一被操作系统显式调用的函数;2.endl具有输出换行效果,并刷新相关联的缓冲区;3.在调试中插入输出语句都应刷新输出流;4.临时忽略一段代码的方法是用编辑器在要忽略的每一行前后插入单行注释;5.标准库的头文件用尖括号之前在csdn看到一原创 2012-02-17 09:53:18 · 1991 阅读 · 1 评论 -
Cmake的介绍和使用 Cmake实践
Cmake优点:1. 开发源代码,实用类BSD许可发布。2. 跨平台,并可以生成native编译配置文件,在linux/unix平台,生成makefile,在mac平台可以生成xcode,在windows平台可以生成msvc工程的配置文件。3. 能够管理大型项目4. 简化编译构建过程和编译过程,只需要cmake+mak转载 2012-02-22 15:51:10 · 5210 阅读 · 0 评论 -
再学C++ Primer(9)-类
将关键字const加在形参表之后,就可以将成员函数声明为常量,const成员不能改变其所操作的对象的数据成员,const必须同时出现在声明和定义中.数据抽象和封装的两个重要优点:1)避免类内部出现无意的,可能破坏对象状态的用户级错误。2)随时间推移可以根据需求改变或缺陷报告来完善类实现而无需改变用户级代码。构造函数初始化式初始化列表Sales_item::Sales原创 2012-11-14 16:06:48 · 1801 阅读 · 0 评论 -
C语言中生产随机数及计算运行时间(微秒级)
java中要生产随机数的 话 直接 new一个 Random就 可以 了 ,c语言中的话会稍微麻烦一点点。计算运行时间 在比较算法运行效率中 要 用到 。#include#include #include int main(){ clock_t start, finish; //声明start和finish是两个时间 srand(10); double tim原创 2012-10-22 23:47:32 · 7320 阅读 · 0 评论 -
破解凯撒密码
首先来看以下恺撒密码。离散数学的一道作业题。凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。例如,如果密匙是把明文字母的位数向后移动三位,那么明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C,由此可见,位数就是凯撒密码加密和解密的密钥。题目如下:It is known that原创 2013-04-05 01:15:15 · 12291 阅读 · 0 评论 -
C语言中的正则表达式
正则表达式(Regular Expressions),又被称为regex或regexp,是一种十分简便、灵活的文本处理工具。它可以用来精确地找出某文本中匹配某种指定规则的内容。 关于正则表达式的教程,可以参考这里。 在C/C++中常用的正则表达式库有GNU Regex Library, Boost.Regex, PCRE, PCRE++。这四个库中,后面两个是有关原创 2013-02-26 15:37:02 · 1956 阅读 · 0 评论 -
c语言实现有限状态机
有限状态机是一种数学概念,运用到程序中,可用于有限数量的状态的变化,每个子程序进行一些处理并选择下一种状态。基本的实现思路就是用一张表保存所有可能的状态,并列出进入每个状态时可能执行的所有动作,其中最后一个动作就是计算下一个应该进入的状态。运行状态就是从初始状态开始,不停的在各个状态之间转换,直到结束状态。FSM的实现方式:1) switch/case或者if/else这无原创 2013-03-04 17:00:55 · 5692 阅读 · 2 评论