C++primer第9章 顺序容器 课后答案(持续更新)

9.1

(a) list
(b) deque,如果不纠结常数话list也可以
(c ) vector

9.2

list<deque<int>> ldi;

9.3

对于满足如下条件,两个迭代器begin和end构成一个迭代器范围:

  • 它们指向同一个容器中的元素,或者是容器最后一个元素之后的位置
  • 我们可以通过反复递增begin来到达end,即end不在begin之前

9.4

#include<iostream>
#include<vector>

using namespace std;

typedef vector<int>::iterator veci;
bool find(veci A, veci B, int c) {
	while(A != B) {
		if(*A == c) return true;
		++A;
	}
	return false;
}

int main()
{
	vector<int> vec = {9, 9, 8, 2, 4, 4, 3, 5, 3};
	for(int i = 0; i < 10; ++i) {
		if(find(vec.begin(), vec.end(), i)) cout << i << " is in vec.\n";
		else cout << i << " is not in vec\n";
	}
	return 0;
}

9.5

#include<iostream>
#include<vector>

using namespace std;

typedef vector<int>::iterator veci;
veci find(veci A, veci B, int c) {
	while(A != B) {
		if(*A == c) return A;
		++A;
	}
	return B;
}

int main()
{
	vector<int> vec = {9, 9, 8, 2, 4, 4, 3, 5, 3};
	for(int i = 0; i < 10; ++i) {
		auto it = find(vec.begin(), vec.end(), i);
		if(it == vec.end()) cout << i << " is not in vec.\n";
		else cout << *it << " is in vec\n";
	}
	return 0;
}

9.6

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

迭代器的算术运算法符只能应用于string、vector、deque、array的迭代器。
因此需要将

while(iter1 < iter2) 

修改为:

while(iter1 != iter2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值