练习 10.37:给定一个包含10个元素的vector,将位置3到7之间的元素按逆序拷贝到一个list中。
第一眼看到这题时,竟然还想了一会怎么获得特定位置的迭代器。。
由于我们可以用一个迭代器范围来初始化一个容器,只需满足范围中元素的类型与被初始化容器的元素类型相容即可,因此,我们可以获得对应位置的迭代器并转换成反向迭代器即可:
int main(int argc, char *argv[]) {
vector<int> vec;
for (int i = 0; i < 10; ++i) {
vec.push_back(i);
}
vector<int>::reverse_iterator start(vec.begin() + 7);
vector<int>::reverse_iterator end(vec.begin() + 3 - 1);
/*vector<int>::reverse_iterator start(vec.rend() - 7);
vector<int>::reverse_iterator end(vec.rend() - 3 + 1);*/
list<int> lst(start, end);
for (auto &iter : lst) {
cout << iter << ' ';
}
cout << endl;
return 0;
}
可以看出在用普通迭代器和反向迭代器进行初始化时形式上是很相似的,只需要将begin和end进行互换,+和-进行互换,即可得到指向同一位置的迭代器。又因为迭代器范围是左闭右开的,因此在对end进行初始化时需要多进行一步移位。