随笔分类 -  C++

摘要:问题最近学习C++碰到这样一个问题,while(cin>>s){},这样的一个语句用什么样的输入能够结束运行,到网上一查,大家给出的答案是ctrl+z,可以使该程序结束。但是,对于ctrl+z的作用和ctrl+z的实质是什么却都没有深刻的剖析。于是,翻书找到了些内容,认为自己解决了这个问题。现将学习到的内容记录如下。首先,先了解一下,究竟能是一个输入流停止工作的有哪些条件。流的状态流有正常的状态和错误的状态。流只有在正常的状态下,才能够正常的工作。输入流在正常的工作状态下,才能够执行读的操作。ctrl+z,的作用其实就是让流从正常的工作状态,转为不工作的其实也可以说是错误的工作状态 阅读全文
posted @ 2011-03-21 20:10 白了少年头 阅读(2587) 评论(0) 推荐(0) 编辑
摘要:字符串可以用字符数组与字符串变量两种方式来存储,效果类似。一、用字符数组来存储字符串: char st1[100],st2[100] ; //字符数组说明cin>>st1>>st2;long a,b;输入:hello, world则st1={‘h’,’e’,’l’,’l’,’o’,’,’,’\0’}st2={‘w’,’o’,’r’,’l’,’d’,’\0}字符’\0’为字符串结束标志1. 字符数组长度 strlen(st1); //如a=strlen(st1);b=strlen(st2); 则a=6,b=52. 字符数组比较 不能直接比较,st1>st2是错误的, 阅读全文
posted @ 2011-03-15 22:33 白了少年头 阅读(8975) 评论(0) 推荐(0) 编辑
摘要:/*两个函数虽然看上去名称相同都是getline,但它们却分属于不同的类中的成员函数。cin.getline(a,20)的getline是输入流对象的成员函数,即istream::getline,使用时需头文件#include <iostream>getline(cin,s)的getline是string类对象的成员函数,即string::getline,使用时需头文件#include <string>第二个string类的getline函数,如果是在VC6.0下编译的,则必须敲两次回车string类的getline(cin,s);中第一个参数要求是一个输入流对象的引用 阅读全文
posted @ 2011-03-15 21:19 白了少年头 阅读(2213) 评论(0) 推荐(0) 编辑
摘要:vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:using std::vector;vector<int> vInts;或者连在一起,使用全名:std::vector<int> vInt 阅读全文
posted @ 2011-03-06 19:26 白了少年头 阅读(63456) 评论(0) 推荐(3) 编辑
摘要:人们有时好像喜欢故意使C++语言的术语难以理解。比如说new操作符(new operator)和operator new的区别。 当你写这样的代码:string *ps = new string("Memory Management"); 你使用的new是new操作符。这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它的功能总是一样的。它要完成的功能分成两部分。第一部分是分配足够的内存以便容纳所需类型的对象。第二部分是它调用构造函数初始化内存中的对象。new操作符总是做这两件事情,你不能以任何方式改变它的行为。 你所能改变的是如何为对象分配内存。new操作符 阅读全文
posted @ 2011-03-06 16:30 白了少年头 阅读(753) 评论(0) 推荐(0) 编辑
摘要:-------------------------------------------Section 0 前言-------------------------------------------写个简单的yuv读取的库,卡在多维数组动态分配的问题上。唉,还是C基本功不扎实,于是花了一下午时间,算是给自己有了点交代。参考《C专家编程》。水平有限,欢迎看客指正。-------------------------------------------Section 1 左值与右值-------------------------------------编译器为每个变量分配一个地址(左值),该地址在编 阅读全文
posted @ 2011-02-28 17:18 白了少年头 阅读(478) 评论(0) 推荐(0) 编辑
摘要:之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用=进行赋值操作,==进行比较,+做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。首先,为了在我们的程序中使用string类型,我们必须包含头文件&lt;string&gt;。如下:#include&lt;string&gt;//注意这里不是string.hstring.h是C字符串头文件1.声明一个C++字符串声明一个 阅读全文
posted @ 2011-02-12 15:40 白了少年头 阅读(17534) 评论(0) 推荐(4) 编辑
摘要:在前一节中我们有几个例子中提到了cin函数出错,以致不再执行读操作(程序8)。而且我们经常会看到程序中会出现cin.clear(),cin.ignore(), cin.fail()等函数。这些函数都是与cin的错误处理有关的。这一节我们来分析一下cin的错误处理机制,并且学习几个重要的函数:cin.fail(), cin.bad(), cin.good(), cin.clear(), cin.ignore()等。程序执行时有一个标志变量来标志输入的异常状态,其中有三位标志位分别用来标志三种异常信息,他们分别是:failbit,eofbit,badbit。这三个标志位在标志变量中是这样分配的: 阅读全文
posted @ 2011-02-12 15:39 白了少年头 阅读(3128) 评论(0) 推荐(0) 编辑
摘要:很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:程序1:#include &lt;iostream&gt;using namespace std;int main(){int m, n;cin&gt;&gt;m;cin&gt 阅读全文
posted @ 2011-02-12 15:37 白了少年头 阅读(1058) 评论(0) 推荐(0) 编辑
摘要:一、预备知识&mdash;程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)&mdash; 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) &mdash; 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)&mdash;,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一 阅读全文
posted @ 2011-02-09 17:38 白了少年头 阅读(10490) 评论(0) 推荐(2) 编辑
摘要:0. 引言使用过SDK的朋友应该知道“回调函数”(callback function)这个概念,但本文并不是介绍如何使用回调函数,而是站在SDK开发者的角度,讲述如何实现回调机制。1. 何为回调(callback)所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函... 阅读全文
posted @ 2010-11-17 09:29 白了少年头 阅读(4651) 评论(0) 推荐(1) 编辑
摘要:前言我的blog以前很长一段时间关注的都是C++中的技术&细节,乃至于读者和应者都寥寥。然而5月份的时候写的一篇“你应当如何学习C++”,阅读量却达到了3万多,在blog上所有文章中却是最高的(且远远超过了第二位);评论数目也有一百多。为什么独独这篇能够激起这么多的回应,想必是国内的C++社群被C++压抑太久,或者,严格来说,是被 C++的教育方式压抑太久。实际上,... 阅读全文
posted @ 2010-11-03 20:25 白了少年头 阅读(2658) 评论(0) 推荐(0) 编辑
摘要:lib和dll lib和dll文件的区别和联系 .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们... 阅读全文
posted @ 2010-10-30 19:00 白了少年头 阅读(701) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示