9.2 容器库概览
容器库的操作分为通用的,顺序容器(大部分)通用的,关联容器(大部分)通用的,以及容器特有的操作。
对于容器的通用操作,如表所示:
可以看到容器的通用操作大部分是和迭代器有关的。
有几个可能会被忘记的点是:
1.可以使用迭代器表示一个范围来初始化容器
2.可以使用swap来交换两个容器的元素
同样,我觉得这些东西不需要死记,在需要用到的时候再查也不迟。
练习
9.2
list<deque<int>> data;
9.2.1 迭代器
迭代器的以下操作基本是通用的。
iter++;
iter--;//forward_list不支持,顾名思义嘛,forward_list是单向的
iter1==iter2;
iter1!=iter2;
*iter;
iter->data;
而这些操作是string ,vector,deque,array才能用的
iter+n;
iter-n;
iter1>iter2;
iter1<iter2;
iter1<=iter2;
iter1>=iter2;
iter1-iter2;
迭代器范围
迭代器返回是一个编程的规范,编译器是不会检查这个的。
范围由两个迭代器决定,两个迭代器通常为begin和end。
begin指向容器的第一个元素,而end指向元素的最后一个元素之后的位置。
容器的end指向最后一个元素的下一元素的位置的好处。
我们可以通过begin==end来判断容器是否为空。
需要满足以下的条件,才能称之为一个迭代器范围
1.两个迭代器指向同一个容器中的元素或者最后一个元素之后的位置
2.begin要大于等于end,即,begin可以递增达到end。
一个迭代器范围包含了begin但是不包含end。
练习
9.3
1.两个迭代器都指向同一个容器的元素或者指向容器的最后一个元素的之后的位置
2.“begin”要大于“end”,即“begin”可以通过递增的方式达到“end”;
9.4
bool get_value_index(const vector<int> &vec, int value) {
bool can_find = false;
for (vector<int>::const_iterator begin = vec.begin(); begin != vec.end(); begin++) {
if (*begin == value) {
can_find = true;
break;
}
}
return can_find;
}
测试用例
vector<int> vec = {
3,2,3,4,4,6,7,6,4,4,5,43,3,1};
int i = 4;
cout << get_value_index(vec,