练习10.34
使用reverse_iterator逆序打印一个vector。
解答:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> order{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (auto riter = order.crbegin(); riter != order.crend(); riter++){
cout << *riter << " ";
}
cout << endl;
return 0;
}
练习10.35
使用普通的迭代器逆序答应一个vector。
解答:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> order{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (auto riter = order.end() - 1; riter != order.begin() ; riter--){
cout << *riter << " ";
}
cout << *order.begin()<<endl;
return 0;
}
练习10.36
使用find在一个int的list中查找最后一个值为0的元素。
解答:
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
int main() {
list<int> order{ 1, 2, 3, 4, 5, 0, 6, 0, 7, 0, 8, 9 };
auto zero = find(order.crbegin(), order.crend(), 0);
return 0;
}
练习10.37
给定一个包含10个元素的vector,将为之3到7之间的元素按照逆序拷贝到一个list中。
解答:
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main() {
vector<int> order{ 3, 5, 6, 3, 4, 5, 7, 7, 5, 4 };
//vector<int> order{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
list<int> ilst;
sort(order.begin(), order.end());
auto three = find(order.crbegin(), order.crend(), 2);
auto seven = find(order.crbegin(), order.crend(), 7);
copy(seven, three, back_inserter(ilst));
for (auto i : ilst){
cout << i << " ";
}
cout << endl;
return 0;
}
这里需要注意的是,普通迭代器与反向迭代器的关系反映了左闭右开区间, [a, b)。
题目中,“3到7之间的元素”,我的理解就是[3, 7]。
所以,这里在寻找3的迭代器时,使用的是2作为标示。