首页 > 编程语言 > 详细

<<c++ primer>> 4th 第九章

时间:2015-03-25 17:01:19      阅读:252      评论:0      收藏:0      [点我收藏+]

9.1解释下列初始化,指出哪些是错误的,为什么?

1 int ia[7] = {0,1,1,2,3,5,8};
2 string sa[6] = {"a","b","c","d","e","f"};
1 vector<string> svec(sa,sa+6);
2 list<int> ilist(ia+4,ia+6);
3 vector<int> ivec(ia + 8);//错误,溢出
4 lise<string> slist(sa+6,sa);//错误,溢出越界

9.2 创建和初始化一个vecior对象有四种方法,为每种方式提供一个例子,并解释每个例子生成的vector对象包含什么值。

//创建一个指定数目元素的vector对象,并初始化为0
vector<int> vec(10);//10个0

//创建一个指定数目元素的vector对象,并初始化为指定数值
vector<int> vec(101);//10个1

//通过数组赋值
inr ia[3] = {1,2,3);
vector<int> ivec(ia,ia+3);//1,2,3

//通过其他vector对象赋值
vector<int> ivec1(10,1); ;//10个1
vector<int> ivec2(ivec1);//10个1

9.3 解释复制容器对象的构造函数和使用两个迭代器的构造函数之间的差别。

  • 将一个容器复制给另一个容器时,类型必须匹配,容器类型和元素类型都必须相同。
  • 使用迭代其构造函数,不要求容器类型必须相同,容器内的元素类型也可以不相同,只要他们之间相互兼容,能够将要转换为所构建的新容器的元素类型,即可实现复制。

9.4 定义一个list对象来存储deque对象里的元素,该deque对象存放int型元素。

1 list< deque<int> > ld; //注意一定要加空格

9.5 为什么我们不可以使用容器来存储iostream 对象。

  • 容器元素类型必须满足以下两个约束: 元素类型必须支持赋值运算。 元素类型的对象必须可以复制。
  • IO库类型不支持复制或赋值。因此,不能创建存放IO类型对象的容器。

9.6 假设有一个名为Foo的类,这个类没有定义默认构造函数,但提供了需要一个int 类型参数的构造函数,定义一个存放Foo 的list对象,该对象有10个元素。

1 list<Foo> flist(10,1);

9.7 下面的程序错在哪里?如何改正。

list<int> lst1;
list<int>::iterator iter1 = lst1.begin(),
                           iter2 = lst1,end();

while(iter1 < iter2)

更正

list<int> lst1;
list<int>::iterator iter1 = lst1.begin(),
                           iter2 = lst1,end();

while(iter1 != iter2)           

9.8 假设vec_iter与vector对象的一个元素捆绑在一起,该vector对象存放string类型的元素,请问下面的语句实现什么功能?

if(vec_iter->empty() ) /*.....*/
答:判断所指向的元素是否为空。

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

Zinclude<list>

using namespace std;

int main()
{
   
    list<int> iil;
    for(int i = 0;i<10;i++)
    {
        iil.push_back(i);
    }
    for(list<int>::iterator i = iil.end();i != iil.begin();)
    {
        cout<<*(--i)<<" ";
    }
    return 0;
}

9.10 下列迭代器的用法哪些(如果有的话) 是错误的?

const vector<int> ivec(10);
vector<string> svec(10);
list<int> ilist(10);

(a) vector<int>::iterator it = ivec.begin(); // 错误,const
(b) list<int>::iterator it = ilist.begin() + 2;/错误,list不支持 +2
(c) vector<string>::iterator it = &svec[0];
(d) for(vector<string>::iterator it = svec.begin();it != 0;++it)
    //.....
//错误,不能和0比较

 

<<c++ primer>> 4th 第九章

原文:http://www.cnblogs.com/suixinwuji/p/4365879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!