C++_访问容器内元素-迭代器
访问容器内元素
访问容器中元素的方法
索引--数字与元素之间的映射--下标访问
键值--key 与元素之间的映射
迭代器--for循环-递归
顺序访问--
索引
并不是说每一种集合或者每一种数据结构都有索引器
迭代
迭代即更新换代,每次的更新都必须依赖于上一次的结果 节省内存
* (dereference) and ++ (increment).
迭代与指针
指针不提供越界访问保护,边界检查,以及代码移植和改动能力,
迭代器能自主管理内存,当生命周期结束,它就会释放掉对应的内存,不会造成内存泄漏。
迭代与索引
binary search中计算 mid=(beg+end)/2 与mid=beg+(end-beg)/2的区别
01.中间结果 。 avoid overflow.
beg+end操作很可能会出现溢出的风险,但是后一种写法不会出现比end要大的中间数据,所以比较安全
02.因为指针和迭代器运算不支持相加运算,却支持相减运算
end does not denote an element, it may not be incremented or dereferenced.
mid = beg/2 + end/2 precision loss.
#include<iostream>
#include <vector>
using std::vector;
int main(){
auto beg = text.begin(),end=text.end();
auto mid = text.begin()+(end-beg)/2;
while(mid !=end &&*mid != sought){
if(sought < *mid)
end = mid;
else
beg = mid+1;
mid = beg +(end-beg)/2
}
}
全局函数(如 begin() 和 end())以及运算符(如 ++ 和 --)向前或向后移动,来显式使用迭代器
const_iterator是一种迭代器类型,它用于遍历容器(如vector、list、map等)中的元素 cbegin() 和 cend()
reverse_iterator
反向迭代器(reverse_iterator)也叫逆向迭代器是一种特殊类型的迭代器,它反向遍历容器中的元素
while循环,反向迭代器从vec的最后一个元素开始遍历,直到到达rend()(即第一个元素的前一个位置)
反向迭代器实际上是一个适配器(adapter),它内部持有一个普通的正向迭代器,并且通过适配的方式改变了正向迭代器的行为。
it(解引用)、it->member(成员访问)、++it(前缀和后缀递增)、it1 == it2 和 it1 != it2(相等性比较)
python
迭代器对象
内置既有__iter__方法,又有__next__方法的对象都叫迭代器对象
迭代器模式
迭代器模式将集合的遍历与集合对象的内部表示分离

浙公网安备 33010602011771号