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)