摘要:
当函数需要处理数组且函数体不依赖于数组的长度时应使用指针形参,其他情况下应使用引用形参。 指针形参的优点: 是可以明确地表示函数所操作的是指向数组元素的指针,而不是数组本身,而且可以使用任意长度的实参数组来调用函数;指针形参缺点: 是函数体不能依赖于数组长度,否则容易造成数组内存的越界访问,从而产生错误的结果或者导致程序崩溃。 引用形参的优点: 是在函数体中依赖数组的长度是安全的;引用形参的缺点: 限制了可以传递的实参数组,只能使用长度匹配的实参数组来调用函数。 阅读全文
随笔档案-2012年08月
常见动态内存的管理程序错误
2012-08-22 16:14 by 残月星辰, 178 阅读, 收藏,
摘要:
三种常见的程序错误与动态内存分配相关:1. 删除(delete)指向动态分配内存的指针失败,因而无法将该块内存返还给自由存储区。删除动态分配内存失败称为“内存泄漏(memory leak)”。内存泄漏很难发现,一般需要等应用程序运行了一段时间后,耗尽了所有内存空间时,内存泄漏才会显露出来。2.读写已删除的对象。如果删除指针所指向的对象之后,将指针置为0值,则比较容易检测出这类错误。3.对同一个内存空间使用两次delete表达式。当两个指针指向同一个动态创建的对象,删除时就会发生错误。如果在其中一个指针上做delete运算,将该对象的内存空间返还给自由存储区,然后接着delete第二个指针,此时 阅读全文
理解复杂的const类型的声明
2012-08-17 09:41 by 残月星辰, 305 阅读, 收藏,
摘要:
阅读 const声明语句产生的部分问题,源于const限定符既可以放在类型前也可以放在类型后:string const s1;// s1 and s2 have same type const string s2;// they're both strings that are const用typedef 写 const类型定义时,const限定符加载类型名前面容易引起对所定义的真正类型的误解: string s; typedef string *pstring; const pstring cstrl =&s; pstring const cstr2 =&s; str 阅读全文
C++ 术语(更新中..)
2012-08-14 17:15 by 残月星辰, 289 阅读, 收藏,
摘要:
1.abstract data type(抽象数据类型) 隐藏其实现的数据类型。使用抽象数据类型时,只需要了解该类型所支持的操作。2.bitset一种标准库类型,用于保存位置,并提供地各个位的测试和置位操作。3. cctype header(cctype 头文件) 从C标准库继承而来的头文件,包含一组测试字符值得列程。4. class template(类模板) 一个可创建许多潜在类类型的蓝图。使用类模板时,必须给出实际的类型和值。例如,vector类型是保存给定类型对象 的模板。创建一个vector对象是,必须指出这个vector对象所保存的元素的类型。vector<int>保存 阅读全文
bitset
2012-08-13 21:20 by 残月星辰, 334 阅读, 收藏,
摘要:
有些程序要处理二进制位的有序集,每一个位可能包含0 1值。位是用来保存一组项或条件的yes/no信息的简介方法。标准库提供的bitset类简化了位集的处理。头文件及其声明:#include<bitset>using std::bitset;bitset对象的初始化和定义初始化bitset对象方法bitset<n> b;b有n位,每位都0bitset<n>b(u);b是unsigned long 型u的一个副本bitset<n>b(s);b是string对象s中含有的位串的副本bitset<n>b(s,pos,n);b是s中从位置pos 阅读全文
迭代器简介
2012-08-13 16:37 by 残月星辰, 249 阅读, 收藏,
摘要:
迭代器是一种检查容器内元素并遍历元素的数据类型标准库为每一种标准容器定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器,而只有少数容器支持下标操作。因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作vector类型也是一样的。容器的iterator类型每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter;这语句定义了名为iter的变量,它的数据类型是vector<int>定义的iterator类型。迭代器和迭代 阅读全文
vector
2012-08-11 14:17 by 残月星辰, 358 阅读, 收藏,
摘要:
标准库 vector 类型vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。我们把vector称为容器,是因为它可以包含其他对象,一个容器中所有对象都必须是同一种类型。vector是一个类模板(class template),使用模板可以编写一个类定义或函数定义,,而用于多个不同数据类型。例1:vector<int> ivec;vector<Sales_item>Sales_vec;定义vector对象要指定类型和一个变量的列表。上面第一个定义,类型是 vector<int>,该类型既是含有若干int类型对象的vector,变量名为 阅读全文
string 对象中字符的处理
2012-08-10 21:56 by 残月星辰, 213 阅读, 收藏,
摘要:
cctype中的函数isalnum(c)如果C是字母或者数字,则为Trueisalpha(c)如果C是字母 则为trueiscntrl(c)如果C是控制字符,则为trueisdigit(c)如果C是数字,则为trueisgraph(c)如果C不是空格,但可打印,则为trueislower(c)如果C是小写字母,则为trueisprint(c)如果C是可打印的字符,则trueispunct(c)如果C是标点符号,则trueisspace(c)如果C是空白字符,则为trueisupper(c)如果C是大写字母,则trueisxdigit(c)如果C是十六进制数,则为truetolower(c)如果 阅读全文
解释string类型的输入操作符和getline函数分别如何处理空白符
2012-08-10 19:16 by 残月星辰, 1596 阅读, 收藏,
摘要:
1. string类型的输入操作符对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直到再次遇到空白字符,读取终止(该空白字符仍留在输入流中)。测试string 代码: 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 using std::string; 5 int main() 6 { 7 8 string line; 9 while(cin>>line)10 cout<<line<<endl;11 return 0;1 阅读全文
标准库 string类型和字符串字面值
2012-08-10 15:39 by 残月星辰, 1253 阅读, 收藏,
摘要:
1.标准库 string类型string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。标准string类型的目的就是满足对字符串的一般应用。与其他的标准库类型一样,用户程序要是string类型对象,必须包含相关头文件。如果提供了合适的using声明,那么编写出来的程序将会变得简短些;#include <string>using std::string2.string 对象的定义和初始化构造函数是一个特殊成员函数,定义如何初始化该类型的对象。下表中列出几个string类型常用的构造函数。当没有明确指定对象初始化时,系统将使用默认函数。几 阅读全文
程序书写规范笔记
2012-08-09 21:41 by 残月星辰, 201 阅读, 收藏,
摘要:
规范一:1 for(int i =0;i<100 ;++i)2 //process i这段程序虽然合法,但是风格很糟糕。问题主要是在于使用具体值100作为循环上界,100的意义在上下文中没有体现出来,导致程序可读性差,若100这个值在程序中出现多次,则当程序的需求发生变化(如将100改变成为1000)时,对程序代码的修改复杂易出错。修改后1 const Maxn=100;2 3 for(int i =0;i<Maxn;++i)4 {5 //6 } 阅读全文
警告:未初始化的变量引起运行问题
2012-08-09 20:59 by 残月星辰, 4050 阅读, 收藏,
摘要:
使用未初始化的变量是常见的程序错误,通常也是难以发现的错误。虽然许多编译器都至少会提醒不要使用未初始化变量,但是编译器并未被要求去检测未初始化变量的使用。而且,没有一个编译器能检测出所有未初始化变量的使用。有时我们很幸运,使用未初始化的变量导致程序在运行时突然崩溃。一旦跟踪到程序崩溃的位置,就可以轻易地发现没有正确地初始化变量。但有时,程序运行完毕却产生错误的结果。更糟糕的是,程序运行在一部机器上时能产生正确的结果,但是另外一部机器上却不能得到正确的结果。添加代码到程序的一些不相关的位置,会导致我们认为是正确的程序产生错误结果。,问题出在未初始化的变量事实上都有一个值。编译器把该变量放到内存中 阅读全文
C++ endl
2012-08-07 20:42 by 残月星辰, 359 阅读, 收藏,
摘要:
io库程序 1 #include<iostream> 2 int main() 3 { 4 5 std ::cout <<" Enter two numbers:"<<std::endl; 6 int v1,v2; 7 std ::cin >> v1>>v2; 8 std ::cout<<" the sum of "<<v1<<" and "<<v2 9 <<" is "<<v1+v2 阅读全文
C++ 字符常量
2012-08-06 22:14 by 残月星辰, 3011 阅读, 收藏,
摘要:
字符常量是有单字符常量和字符串常量两种。单字符常量是由一对单引号括起来的单个字符构成,如 'A'、'2'、'#'占一个字节空间.字符串是具有多个元素的一维数组。用户使用字符串常量只要将字符串用一对双引号括起来就可以了,而编译程序自动在每个字符串末尾加上“\0”,来表示标志字符串结束。例如"kenny"在内存中存储表示为:kenny\0字符串在内部表示所占的空间要比实际字符数多一个字节。"A"需占两个字节分别为存放A和" \0",而'A'只需要一个内存字节存放字符A。合法的 阅读全文
C++基本数据类型
2012-08-06 21:49 by 残月星辰, 235 阅读, 收藏,
摘要:
C++ 的基本数据类型:int整数型char字符型float 单精度/double 双精度浮点型void空值型 用于函数和指针这四种数据类型都是基本型,除了void以外的3种基本类型前面还可以加上上限定词,用来表示新的类型。signed表示有符号型unsigned表示无符号型long长型short短型以上限定词可作用在整型和字符型前,只有long可以作用在于浮点型前。类型位长度字节数值域备注char810~255int162-32768~32767VC使用4个字节float3243.4E-38~3.4E+38double6481.7E-308~1.7E+308short int162-3276 阅读全文
浙公网安备 33010602011771号