随笔分类 -  C++ Primer

map对象建立家族姓氏查询
摘要:题目:定义一个map对象,其元素的键是家族姓氏,而值是存储该家族孩子名字的vector对象。为这个map容器输入至少六个条目。通过基于家族姓氏的查询检测你的程序,查询应输出该家族所有孩子的名字。 1 //定义一个map对象,其元素的键是家族姓氏 2 //而值则是存储该家族孩子名字的vector对象 3 //进行基于家族姓氏的查询,输出该家族所有孩子的名字 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 int main()11 {12 map > children;13 string... 阅读全文
posted @ 2013-09-04 14:36 猿人谷 阅读(625) 评论(0) 推荐(0) 编辑
数组与指针
摘要:一、数组 数组是由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素类型,维数则指定数组中包含的元素个数。 数组的维数必须用值大于等于1的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型const对象。非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的。 1、数组的长度是固定的,与vector类型不同,数组不提供push_back或者其他的操作在数组中添加新元素。如果必须添加新元素,程序员必须自己管理内... 阅读全文
posted @ 2013-08-15 20:25 猿人谷 阅读(497) 评论(0) 推荐(0) 编辑
标准库类型
摘要:一.标准string类型 string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。1.1 string对象的定义和初始化 当没有明确指定对象初始化时,系统将使用默认构造函数。 注意:编程时一定要注意区分字符串字面值和string数据类型的使用。1.2 string对象的读写 1. string类型的输入操作符:读取并忽略开头所有的空白字符(如空格、换行符、制表符)。读取字符直至再次遇到空白字符,读取终止。 2.读入未知书目的string对象: string word; // read until end-of-file , writi... 阅读全文
posted @ 2013-08-15 16:03 猿人谷 阅读(1222) 评论(0) 推荐(2) 编辑
《C++ primer》--第1,2章小结
摘要:来源:http://blog.csdn.net/wangqiulin123456/article/details/84838531、变量初始化: 定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。变量的初始化如下:[cpp] view plaincopyprint?intval1=0;//初始化intval2;//未初始化2、编译器的部分功能: 查错语法错误类型错误声明错误 3、从键盘输入文件结束符 OS使用不同的值作为文件结束符。Windows系统下通过输入Ctl+z来输入文件结束符,Unix中通常是Ctl... 阅读全文
posted @ 2013-08-15 10:11 猿人谷 阅读(443) 评论(0) 推荐(0) 编辑
《C++ primer》--第12章
摘要:习题12.7 什么是封装?为什么封装是有用的?解答:封装是一种将低层次的元素组合起来形成新的、高层次实体的技术。例如,函数是封装的一种形式:函数所执行的细节行为被封装在函数本身这个更大的实体中;类也是一个封装的实体:它代表若干成员的聚集,大多数(良好设计的)类类型隐藏了实现该类型的成员。封装隐藏了内部元素的实现细节(例如,可以调用一个函数但不能访问它所执行的语句),其主要优点在于:避免类内部出现无意的、可能破坏对象状态的用户级错误;使得在修改类的实现时只要保持类的接口不变,就无需改变用户级代码。因此,封装是有用的。 阅读全文
posted @ 2013-08-08 17:15 猿人谷 阅读(413) 评论(0) 推荐(0) 编辑
《C++ primer》--第11章
摘要:习题11.1 algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。编写程序读取一系列int型数据,并将它们存储到vector对象中,然后统计某个指定的值出现了多少次。//读取一系列int数据,并将它们存储到vector对象中,//然后使用algorithm头文件中定义的名为count的函数,//统计某个指定的值出现了多少次#include#include#includeusing namespace std;int main(){ int ival , searchValue; vector ivec; 阅读全文
posted @ 2013-08-06 16:52 猿人谷 阅读(468) 评论(0) 推荐(0) 编辑
总结c++ primer中的notes
摘要:转载:http://blog.csdn.net/ace_fei/article/details/7386517说明:C++ Primer, Fourth Edition (中英文)下载地址:http://download.csdn.net/detail/ace_fei/4165568以下内容截取自该书籍,都是一些基础而又容易忽略的知识点。初窥输入/输出endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。比如下面这段程序可以看出,如果没有cout usingnamespacestd;intmain( 阅读全文
posted @ 2013-08-04 14:08 猿人谷 阅读(655) 评论(0) 推荐(0) 编辑
《C++ primer》--第10章
摘要:习题10.21 解释map和set容器的差别,以及他们各自适用的情况。解答:map容器和set容器的差别在于:map容器是键-值对的集合,而set容器只是键的集合;map类型适用于需要了解键与值的对应的情况,例如,字典(需要了解单词(键)与其解释(值)的对应情况),而set类型使用于只需判断某值是否存在的情况,例如,判断某人的名字是否在黑名单中。习题20.22 解释set和list容器的差别,以及他们各自适用的情况。解答:set容器和list容器的主要差别在于:set容器中的元素不能修改,而list容器中的元素无此限制;set容器适用于保存元素值不变的集合,而list容器适用于保存会发生变化的 阅读全文
posted @ 2013-08-03 21:41 猿人谷 阅读(241) 评论(0) 推荐(0) 编辑
统计并输出所读入的单词出现的次数
摘要:题目:编写程序统计并输出所读入的单词出现的次数。解答:可以建立一个map对象,保存所读入的单词及其出现次数(以单词为键,对应的值为单词的出现次数)。对于map容器,如果下标所表示的键在容器中不存在,则添加新元素,利用这一特性可编写程序如下://通过建立map对象保存所读入的单词及其出现次数,//统计并输出所读入的单词出现的次数#include#include#includeusing namespace std;int main(){ map wordCount; string word; //读入单词并统计其出现次数 cout>word) ++wordCount[word]; //wo 阅读全文
posted @ 2013-08-03 19:55 猿人谷 阅读(1451) 评论(0) 推荐(0) 编辑
编写一个循环将list容器的元素逆序输出
摘要:《c++ primer》P270,习题9.9实现代码如下:#include#includeusing namespace std;int main(){ int ia[5]={1 , 2 , 3 , 4 , 5}; list lst1(ia , ia + 5); list::iterator iter1 = lst1.begin(), iter2 = lst1.end(); while(iter2 != iter1) cout<<*(--iter2)<<" " ; cout<<endl; return 0;} 阅读全文
posted @ 2013-07-31 15:57 猿人谷 阅读(1673) 评论(0) 推荐(0) 编辑
《C++ primer》--第9章
摘要:习题9.2 创建和初始化一个vector对象有4种方式,为每种方式提供一个例子。解答:分配指定数目的元素,并对这些元素进行值初始化:vector ivec(10); // ivec包含10个0值元素 2. 分配指定数目的元素,并将这些元素初始化为指定值:vector ivec(10 , 1); // ivec包含10个值为1的元素 3. 将vector对戏那个初始化为一段元素的副本:int ia[10] = {0 , 1 ,2 ,3 ,4,5,6,7,8,9};vector ivec(ia , ia+10); //ivec包含10个元素,值分别为0~9 4. 将一个vector对象初始化为另一 阅读全文
posted @ 2013-07-31 14:30 猿人谷 阅读(610) 评论(0) 推荐(0) 编辑
《C++ primer》--第7章
摘要:删除指针后,该指针就变成了悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。习题7.8 举一个例子说明什么时候应该将形参定义为引用类型。再举一个例子说明什么时候不应该将形参定义为引用。解答:如果希望通过函数调用修改实参的值,就应该将形参定义为引用类型。例如,用swap函数交换两数的值。如果不将形参定义为指针类型,则需要直接修改实参的值,应该将形参定义为引用类型:void swap(int &v1 , int &v2){ int temp = v2; v2 = v1; v1 = temp; }除了swap函数这种情况外,为了通过一次函数调用获得多个结果值,也可以使 阅读全文
posted @ 2013-07-27 21:03 猿人谷 阅读(357) 评论(0) 推荐(0) 编辑
指针和引用的比较(P105)
摘要:指针和引用的比较?虽然使用引用和指针都可间接访问另一个值,但它们之间有两个重要区别。第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因)。给指针赋值修改的是指针对象本身,也就是使该指针指向另一对象,指针在不同时刻可指向不同的对象(只要保证类型匹配)。 阅读全文
posted @ 2013-07-25 15:46 猿人谷 阅读(266) 评论(0) 推荐(0) 编辑
《C++ primer》--第三章
摘要:习题3.2 什么是默认构造函数?解答: 默认构造函数就是在没有显示提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式,就会使用默认构造函数。 如果用户定义的类中没有显示定义任何构造函数,编译器就会自动为该类生成默认构造函数,称为合成的默认构造函数。习题3.3 列举出三种初始化string对象的方法。解答:不带初始化式,使用默认构造函数初始化string对象。使用给一个已存在的string对象作为初始化式,将新创建的string对象初始化为已存在对象的副本。使用字符串字面值作为初始化式,将新创建的string对象 阅读全文
posted @ 2013-07-24 09:43 猿人谷 阅读(300) 评论(0) 推荐(0) 编辑
习题4.5:列出使用数组而不是vector的缺点
摘要:解答: 与vector类型相比,数组具有如下缺点:数组的长度是固定的,而且数组不提供获取其容量大小的size操作,也不提供自动添加元素的push_back操作。因此,程序员无法在程序运行时知道一个给定数组的长度,而且如果需要更改数组的长度,程序员只能创建一个更大的数组,然后把原数组的所有元素复制到新数组的存储空间中去。与使用vector类型的程序相比,使用内置数组的程序更容易出错且难以调试。 阅读全文
posted @ 2012-12-24 14:21 猿人谷 阅读(344) 评论(0) 推荐(0) 编辑
习题3.13
摘要:题目(习题3.13):读一组整数到vector对象,计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。然后修改程序:头尾元素两两配对(第一个和最后一个,第二个和倒数第二个,以此类推),计算每对元素的和,并输出。修改程序后: 阅读全文
posted @ 2012-12-11 09:34 猿人谷 阅读(316) 评论(0) 推荐(0) 编辑
cctype,string,vector
摘要:题目(习题3.14):读入一段文本到vector对象,每个单词存储为vector中的一个元素。把vector对象中每个单词转化为大写字母。输出vector对象中转化后的元素,每八个单词为一行输出。 阅读全文
posted @ 2012-12-11 09:32 猿人谷 阅读(290) 评论(0) 推荐(0) 编辑