代码改变世界

理解复杂的const类型的声明

2012-08-17 09:41 by 残月星辰, 278 阅读, 0 推荐, 收藏, 编辑
摘要:阅读 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 残月星辰, 259 阅读, 0 推荐, 收藏, 编辑
摘要: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 残月星辰, 318 阅读, 0 推荐, 收藏, 编辑
摘要:有些程序要处理二进制位的有序集,每一个位可能包含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 残月星辰, 228 阅读, 0 推荐, 收藏, 编辑
摘要:迭代器是一种检查容器内元素并遍历元素的数据类型标准库为每一种标准容器定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器,而只有少数容器支持下标操作。因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作vector类型也是一样的。容器的iterator类型每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter;这语句定义了名为iter的变量,它的数据类型是vector<int>定义的iterator类型。迭代器和迭代 阅读全文

vector

2012-08-11 14:17 by 残月星辰, 318 阅读, 0 推荐, 收藏, 编辑
摘要:标准库 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 残月星辰, 199 阅读, 0 推荐, 收藏, 编辑
摘要: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 残月星辰, 1567 阅读, 0 推荐, 收藏, 编辑
摘要: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 残月星辰, 1225 阅读, 0 推荐, 收藏, 编辑
摘要:1.标准库 string类型string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。标准string类型的目的就是满足对字符串的一般应用。与其他的标准库类型一样,用户程序要是string类型对象,必须包含相关头文件。如果提供了合适的using声明,那么编写出来的程序将会变得简短些;#include <string>using std::string2.string 对象的定义和初始化构造函数是一个特殊成员函数,定义如何初始化该类型的对象。下表中列出几个string类型常用的构造函数。当没有明确指定对象初始化时,系统将使用默认函数。几 阅读全文

程序书写规范笔记

2012-08-09 21:41 by 残月星辰, 192 阅读, 0 推荐, 收藏, 编辑
摘要:规范一: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 残月星辰, 3915 阅读, 0 推荐, 收藏, 编辑
摘要:使用未初始化的变量是常见的程序错误,通常也是难以发现的错误。虽然许多编译器都至少会提醒不要使用未初始化变量,但是编译器并未被要求去检测未初始化变量的使用。而且,没有一个编译器能检测出所有未初始化变量的使用。有时我们很幸运,使用未初始化的变量导致程序在运行时突然崩溃。一旦跟踪到程序崩溃的位置,就可以轻易地发现没有正确地初始化变量。但有时,程序运行完毕却产生错误的结果。更糟糕的是,程序运行在一部机器上时能产生正确的结果,但是另外一部机器上却不能得到正确的结果。添加代码到程序的一些不相关的位置,会导致我们认为是正确的程序产生错误结果。,问题出在未初始化的变量事实上都有一个值。编译器把该变量放到内存中 阅读全文