迭代器运算
| vector和string迭代器支持的运算 | |
| iter + n | 迭代器加上一个整数仍得一个迭代器,迭代器指示的新位置与原来相比向前移动了若干个元素。结果迭代器或者指示容器内的一个元素,或者指示容器尾元素的下一个位置 |
| iter - n | 迭代器减去一个整数仍得一个迭代器,迭代器指示的新位置与原来相比向后移动了若干个元素。结果迭代器或者指示容器内的一个元素,或者指示容器尾元素的下一个位置 |
| iter1 += n | 迭代器加法的复合赋值语句,讲iter1加n的结果赋给iter1 |
| iter1 -= n | 迭代器减法的复合赋值语句,讲iter2减n的结果赋给iter1 |
| iter1 - iter2 | 两个迭代器相减的结果是它们之间的距离,也就是说,讲运算符右侧的迭代器向前移动差值个元素后得到左侧的迭代器。参与运算的迭代器必须指向的是同一个容器中的元素或者尾元素的下一个位置 |
| >、>=、<、<= | 迭代器的关系运算符,如果某迭代器指向的容器位置在另一个迭代器所指位置之前,则说前者小于后者。参与运算的两个迭代器必须指向的是同一个容器中的元素或者尾元素的下一位置 |
迭代器的算数运算
vector对象中间位置的元素:
//计算得到最接近vi中间元素的一个迭代器 auto mid = vi.begin() + vi.size()/2;
参与比较的两个迭代器必须合法而且指向的是同一个容器的元素,it和mid是同一个vector对象的两个迭代器,比较它们所指位置孰前孰后:
if(it<mid) //处理vi前半部分的元素
两个迭代器指向的是同一个容器中的愿随或者尾元素的下一个位置,相减所得是两个迭代器的距离。
距离指的是右侧的迭代器向前移动多少位置就能追上左侧的迭代器,其类型是名为difference_type的带符号整型数。
使用迭代器运算
二分搜索:
//text必须是有序的 //beg和end表示我们搜索的范围 auto beg = text.begin(), end = text.end(); auto mid = text.begin() + (end - beg) / 2;//初始状态下的中间点 //当还有元素尚未检查并且我们还没有找到sought时执行循环 while (mid != end && *mid !=sought) { if (sought < *mid)//我们要找的元素在前办部分吗? end = mid;//如果是,调查搜索范围使得忽略掉后半部分 else//我们要找的元素在后半部分 beg = mid + 1;//在mid之后寻找 mid = beg + (end - beg) / 2;//新的中间点 }

浙公网安备 33010602011771号