博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C++ primer》--第9章
阅读量:6002 次
发布时间:2019-06-20

本文共 2841 字,大约阅读时间需要 9 分钟。

 习题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
#include
using namespace std;bool findInt(vector
::iterator beg , vector
::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
iter(a , a + 5); if(findInt( iter.begin() , iter.end() , 5)) { cout<<"success !"<

 

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

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

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

 

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

//判断一个vector
容器所包含的元素//是否与一个list
容器的完全相同#include
#include
#include
using namespace std;int main(){ vector
ivec; list
ilst; int ival; //读入int对象并存储在vector对象中 cout<<"Enter some integers for vector(Ctrl+z to end): " <
>ival) ivec.push_back(ival); cin.clear(); //使流对象重新置为有效状态 //读入int对象并存储在list对象中 cout<<"Enter some integers for list: " <
>ival) ilst.push_back(ival); //比较vector对象和list对象中的对应元素 vector
::iterator vit = ivec.begin(); list
::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." <

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

转载地址:http://ysbmx.baihongyu.com/

你可能感兴趣的文章
安卓混合开发之Cordova,NativeWebView两种实现
查看>>
桶排序
查看>>
石化数字化交付
查看>>
如何用windows Live writer 撰写blog
查看>>
RHEL6入门系列之十九,硬盘分区与格式化
查看>>
Linux下升级 OpenSSH
查看>>
标准功能模块组件 -- 名片管理组件,C\S 版本的标准用例程序,可以参考权限实现方法...
查看>>
zygote进程图
查看>>
ldap快速配置
查看>>
docker之docker-machine用法
查看>>
IIS 7启用static JSON文件能POST方法
查看>>
P5205 【模板】多项式开根
查看>>
微博mini for Windows Phone 8 开发那些事
查看>>
redis文章索引
查看>>
OpenSSH利用处理畸形长度密码造成的时间差,枚举系统用户(CVE-2016-6210)
查看>>
Javascript回调函数
查看>>
可能是最简单的面向对象入门教程(二)为什么要有类型
查看>>
配置Openfiler做ISCS实验
查看>>
Maven启用代理访问
查看>>
LDAP & Implementation
查看>>