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__方法的对象都叫迭代器对象

迭代器模式

迭代器模式将集合的遍历与集合对象的内部表示分离

posted @ 2025-04-16 14:53  辰令  阅读(24)  评论(0)    收藏  举报