习题9.2 创建和初始化一个vector对象有4种方式,为每种方式提供一个例子。

解答:

  1. 分配指定数目的元素,并对这些元素进行值初始化:
  • vector<int> ivec(10);     // ivec包含10个0值元素

2.  分配指定数目的元素,并将这些元素初始化为指定值:

  • vector<int>  ivec(10 , 1);  // ivec包含10个值为1的元素

3.  将vector对戏那个初始化为一段元素的副本:

  • int ia[10] = {0 , 1 ,2 ,3 ,4,5,6,7,8,9};
  • vector<int> ivec(ia , ia+10);  //ivec包含10个元素,值分别为0~9

4.   将一个vector对象初始化为另一vector对象的副本:

  • vector<int>  ivec1(10 , 1);
  • vector<int>  ivec2(ivec1);    //  ivec2包含10个值为1的元素(与ivec1相同)

习题9.3  解释复制容器对象的构造函数和使用迭代器的构造函数之间的区别。

解答:

差别在于:

  • 复制容器对象的构造函数只能将一个容器初始化为另一容器的副本(即复制另一容器的全部元素),这种构造函数要求两个容器是同类型的;
  • 使用两个迭代器的构造函数可以将一个容器初始化为另一容器的子序列(即复制另一容器的一个子序列),而且采用这种构造函数不要求两个容器是同类型的。

习题9.9 编写一个循环将list容器的元素逆序输出。

实现代码如下:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<list>
using namespace std;
 
int main()
{
    int ia[5]={1 , 2 , 3 , 4 , 5};
    list<int> lst1(ia , ia + 5);
    list<int>::iterator iter1 = lst1.begin(),
        iter2 = lst1.end();
 
    while(iter2 != iter1)
        cout<<*(--iter2)<<" " ;
    cout<<endl;
 
    return 0;
}

习题9.12 编写一个函数,其形参是一对迭代器和一个int型数值,实现在迭代器标记的范围内寻找该int型数值的功能,并返回一个bool结果,以指明是否找到指定数据。

#include<iostream>
#include<vector>
using namespace std; bool findInt(vector<int>::iterator beg , vector<int>::iterator end , int ival)
{
while(beg != end)
if(*beg == ival)
break;
else
++beg;
if(beg != end)
return true;
else
return false;
} int main()
{
int a[5] = {10 , 13 , 5 , 8};
vector<int> iter(a , a + 5); if(findInt( iter.begin() , iter.end() , 5))
{
cout<<"success !"<<endl;
}
else
cout<<"failure!"<<endl; return 0;
}

习题9.11  要标记出有效的迭代器范围,迭代器需满足什么约束?

如果迭代器first和last标记出有效的迭代器范围,则必须满足:

  • first和last指向同一个容器中的元素或超出末端的下一个位置;
  • 如果first和last不相等,则对first反复做自增运算必须能够到达last;
  • 即在容器中last不能位于first之前。

习题9.20 编写程序判断一个vector<int>容器所包含的元素是否与一个list<int>容器的完全相同。

//判断一个vector<int>容器所包含的元素
//是否与一个list<int>容器的完全相同
#include<iostream>
#include<vector>
#include<list>
using namespace std; int main()
{
vector<int> ivec;
list<int> ilst;
int ival; //读入int对象并存储在vector对象中
cout<<"Enter some integers for vector(Ctrl+z to end): "
<<endl;
while(cin>>ival)
ivec.push_back(ival); cin.clear(); //使流对象重新置为有效状态 //读入int对象并存储在list对象中
cout<<"Enter some integers for list: "
<<endl;
while(cin>>ival)
ilst.push_back(ival); //比较vector对象和list对象中的对应元素
vector<int>::iterator vit = ivec.begin();
list<int>::iterator lit = ilst.begin();
while(vit != ivec.end() && lit != ilst.end())
{
if(*vit != *lit) //对应元素不相等则结束循环
break;
++vit;
++lit;
}
//输出比较结果
if(vit == ivec.end() && lit == ilst.end()) //所有元素都相等
cout<<"The vector contains the same elements as the list."
<<endl;
else
cout<<"List and vector contain different elements."
<<endl; return 0; }

注意,因为使用文件结束符作为输入vector元素的结束,所以,读入了所有的vector元素后,流cin处于无效状态,需要将流cin重新置为有效,否则,将无法使用cin继续读入list元素。

《C++ primer》--第9章的更多相关文章

  1. C++ Primer 第3章 字符串、向量和数组

    C++ Primer 第3章 字符串.向量和数组 C Primer 第3章 字符串向量和数组 1 命名空间的using声明 2 标准库类型string 3 标准库类型vector 4 迭代器介绍 5 ...

  2. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  3. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...

  4. C++ Primer Plus 第一章 预备知识

    C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...

  5. C++ Primer 笔记 第二章

    C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...

  6. C++ Primer 笔记 第一章

    C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...

  7. C++ primer的第二章的主要内容

    这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型.介绍了什么是变量的过程中了解到了左值与右值的概念.左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现 ...

  8. C++ primer的第一章的主要内容

    第一章主要是把C++的主要的部分简单的介绍了一下,让读者对C++开始有一个简单的了解.看完第一章的收获就是知道如何去读入不确定数目的输入,主要是形式是:whlie(cin>>s){},利用 ...

  9. C++ Primer第18章Vector的再实现及bug修正

    C++Primer第18.1.2节在介绍allocator类的时候,给了一个仿照标准库中vector的例子.感觉示例代码非常好,但是本人发现了一个bug,与大家共享. 按照作者的示例程序,编译程序时总 ...

  10. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

随机推荐

  1. Code::Blocks生成的EXE文件执行错误解决:The program can't start because libgcc_s_dw2-1.dll is missing

    想用C++弄个简单东东,看有没有可行性, 开发软件,微软的太大太肿,就选用了Code::Blocks. 测试HELLO时,在工程环境中没问题的,但生成的EXE执行有问题, 报什么 libgcc_s_d ...

  2. Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

    1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...

  3. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

  4. hdu1021 Fibonacci Again

    http://acm.hdu.edu.cn/showproblem.php?pid=1021 //找规律.. #include<iostream> #include<stdio.h& ...

  5. 套题T1

    间隙妖怪(gap.cpp/c/pas) 题目描述: 八云紫是幻想乡的间隙妖怪.她喜欢和八云橙玩一个叫做翻转的游戏.具体规则如下,八云紫对一个长度为N字符串做M次翻转操作,每次操作给定一个X,八云紫将X ...

  6. linux上应用程序的执行机制

    linux上应用程序的执行机制 执行文件是如何在shell中被"执行"的.本文中尽可能少用一些源码,免得太过于无 聊,主要讲清这个过程,感兴趣的同学可以去查看相应的源码了解更多的信 ...

  7. Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用

    fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...

  8. epmap服务

    epmap是 tcp 135和udp135端口135端口的“epmap - DCE endpoint resolution”记录可以通过连接到135端口和做适当的查询列举出来. 135端口大多数情况下 ...

  9. 如何手动把jar包添加进Maven本地仓库

    有以下两种情况你需要手动通过Maven命令把jar文件添加进本地仓库: 1.在中心仓库里没有你想要的jar包. 2.你自己写了一个jar包,在其他项目要用到. 补充:现在仍有很多jar包不支持Mave ...

  10. ubuntu install rpm package

    Using command 'alien' instead of 'rpm'. sudo apt-get install alien alien -i tst.rpm 'man alien' for ...