练习9.7:
为了索引int的vector中的元素,应该使用什么类型?
解答:
迭代器类型,vector<int>::iterator.
练习9.8:
为了读取string的list中元素,应该使用什么类型?如果写入list,又该使用什么类型?
解答:
迭代器类型,list<string>::const_iterator.
迭代器类型,list<string>::iterator.
练习9.9:
begin和cbegin两个函数有什么不同?
解答:
cbegin是返回const迭代器的,也就是只读迭代器,而begin返回的可读写迭代器。
练习9.10:
下面4个对象分别是什么类型?
vector<int> v1;
const vector<int> v2;
auto it1 = v1.begin(), it2 = v2.begin();
auto it3 = v1.cbegin(), it4 = v2.cbegin();
解答:
当将上面的代码段直接放入main函数中时,gcc4.9.1会有以下的错误提示
error: inconsistent deduction for ‘auto’: ‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’
and then ‘__gnu_cxx::__normal_iterator<const int*, std::vector<int> >’
这段信息出现在
auto it1 = v1.begin(), it2 = v2.begin();
所以,说明it2的类型和it1的类型不一致。
我们将代码改成
vector<int> v1;
const vector<int> v2;
auto it1 = v1.begin();
auto it2 = v2.begin(), it3 = v1.cbegin(), it4 = v2.cbegin();
则编译通过,就说明t2, t3, t4都是一个类型的迭代器。
it1 是 vector
int<
>::
iterator
it2,it3 和 it4 是 vector<
int>::const_
iterator