严格来说,string对象不属于迭代器类型,但是string支持很多与容器类型类似的操作。
迭代器也提供对对象的间接访问。
迭代器分有效和无效。有效迭代器1、指向某个元素2、指向容器尾元素的下一位置。其余情况为无效
begin:返回指向第一个元素。
end:尾后迭代器。返回指向容器尾元素的下一位置,即“容器的一个本不存在的尾后元素”。
若容器为空v.begin()=v.end()。
用==和!=比较两个合法合法迭代器是否相等。
运算符:
*iter
iter->mem
++iter
–iter
iter1==iter2
iter1!= iter2
解引用迭代器
确保V非空 if(v.begin()!=v.end())
迭代器用递增运算符来从一个元素移动到下一个元素。不能对end进行递增和解引用。
for (auto it=s.begin();it!=s.end() && !isspace(*it);++it)遍历
isspace(n)当n是空白(空格横向制表符,纵向制表符回车,换行,进纸)是为真,返回值为1。
解引用迭代器:可获得迭代器所指对象。
**箭头运算符 ->:**把解引用和成员访问两个操作结合在一起。
即it->mem和(*it).mem表达的意思相同。
PS.不能在范围for循环中向vector对象添加元素。
迭代器运算
iter1-iter2:两个迭代器相减的结果是它们之间的距离。没有+
、>、>=、<、<=:迭代器的关系运算符。如果某迭代器指向的容器位置在另一个迭代器所指位置之前,说明前者小于后者。(迭代器是位置的体现)
参与运算的两个迭代器必须指向同一容器中的元素或者尾元素的下一个位置。
difference_type:迭代器距离的类型名。可正可负,为带符号类型。
指向某vector中间位置的元素:
auto mid=v.begin()+vi.size()/2
经典二分搜索。