svec(sa, sa + 6); // (b) 正确.._解释下列初始化,指出哪些是错误的">
赞
踩
- 9.1 解释下列初始化,指出哪些是错误的,为什么?
- int ia[7] = { 0, 1, 1, 2, 3, 5, 8 };
- string sa[6] = {
- "Fort Sumter", "Manassas", "Perryville",
- "Vicksburg", "Meridian", "Chancellorsville"
- };
-
- // (a) 正确
- vector<string> svec(sa, sa + 6);
- // (b) 正确
- list<int> ilist(ia + 4, ia + 6);
- // (c) 错误,初始化迭代器的终止指针访问数组越界
- vector<int> ivec(ia, ia + 8);
- // (d) 错误,初始化容器的迭代器起始点和终止点顺序反了
- list<string> slist(sa + 6, sa);
- 9.2 创建和初始化一个vector对象有4种方式,为每种方式提供一个例子,并解释每个例子生成的vector对象包含什么值。
- int a[8] = { 1,2,3,4,5,6,7,8 };
-
- vector<int> vec; // 创建空容器
- vector<int> vec1(vec); // 创建容器vec的副本vec1,vec1必须与vec具有相同的容器类型,并存放相同类型的元素
- // vec1中值与vec相同,都为空容器
- vector<int> vec2(a, a+5); // 创建vec2,其元素是迭代器a和a+5标示的范围内元素的副本。
- // vec2中值:1,2,3,4,5
- vector<int> vec3(5, 2); // 用5个值为2的元素创建vector vec3
- // vec3中值:2,2,2,2,2
- vector<int> vec4(5); // 创建有5个值初始化元素的vector vec4
- // vec4中值:0,0,0,0,0
- 9.3 解释复制容器对象的构造函数和使用两个迭代器的构造函数之间的差别。
- 解答:
将一个容器复制给另一个容器时,类型必须匹配;容器类型和元素类型都必须相同。
使用迭代器时,不要求容器类型相同,甚至容器内的元素类型也可以不相同,只要它们互相兼容,能够将要复制的元素转换为所构建的新容器的元素类型,即可实现复制。采用这种初始化形式可复制不能直接复制的容器。更重要的是,可以实现复制其他容器的一个子序列。
- 9.4 定义一个list对象来存储deque对象,该deque对象存放int型元素。
list<deque<int>> dlist;
- 9.5 为什么我们不可以使用容器来存储iostream对象?
- 解答:
容器元素类型必须满足以下两个约束:元素类型必须支持赋值运算;元素类型的对象必须可以复制。引用不支持一般意义的赋值运算,因此没有元素是引用类型的容器。IO库类型不支持复制或赋值,因此不能创建存放IO类型对象的容器。
- 9.6 假设有一个名为Foo的类,这个类没有定义默认构造函数,但提供了需要一个int型参数的构造函数,定义一个存放Foo的 list 对象,该对象有10个元素。
list<Foo> Flist(10, 1);
其中一种需要外加类型要求的容器操作是指定容器大小并提供单个初始化式的构造函数。如果容器存储类类型的对象&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。