++iter 重载++运算符,令iter向容器中的下一个元素
--iter 重载--运算符,令iter向容器中的上一个元素,forward_list、map,unordered_map等就不支持。
*iter 重载*运算符返回迭代器iter所指向的引用
iter->mem 解引用iter并获取名为mem的成员
==,!= 判断两个迭代器是否相等
注意:end()返回的是一个超尾迭代器,并不实际指示某个元素,所以不能对其进行递增或解引用,今天leetcode在用二分查找库时们判断返回是否是超尾迭代器,间接导致解引用,使堆内存溢出
注意:iterator与const_iterator,iterator可以对元素读写,const_iterator只能读,不能写,const_iterator包含如下
vetcor<int> v;
const vector<int> cv;
auto it1=v.begin();
auto it2=cv.begin();
auto it3=v.cbegin();
注意:不能向范围for循环对象添加元素
迭代器运算
设迭代器为iterator iter
iter+n 紧部分迭代器支持,如vector,deque,string,加上n个位置
iter-n 紧部分迭代器支持,如vector,deque,string,减去n个位置
iter+=n 紧部分迭代器支持,如vector,deque,string,iter加上n个位置
iter-=n 紧部分迭代器支持,如vector,deque,string,iter减去n个位置
iter1-iter2 紧部分迭代器支持,如vector,deque,string,返回两个迭代器之间的距离
>,>=,<,<= 紧部分迭代器支持,如vector,deque,string,判断哪个迭代器指向的元素更靠后
C有的就不提了
不存在引用数组:int &x[10] 错误
int *p[5],p是含有五个指针的数组
int (*p)[5],p是指向含有5个整数数组的指针
int (&p)[5],p是指向含有5个整数数组的引用
注意cpp操作绑定方式从右向左,这样就很好理解,比如int *(arry)[10];
访问数组元素可以使用索引,或者范围for循环
指针和数组
注意:大多数表达式中,使用数组类型的对象其实是使用一个指向该数组首元素的指针,指针也是迭代器的一种,因为iterator_traits的存在
标准库函数begin(),end();示例:
int bbb[]={1,2,3};
int *start=begin(bbb);
int *_end=end(bbb);
指针可以进行与迭代器一样的计算,与迭代器一样,指针的进行加减时一定要注意是否超出范围,否则会使整个程序崩掉
ptrdiff_t是一种标准库的两个指针相减类型,与size_t一样,为有符号型
下标和指针
数组与指针结合,可以下标为负值,示例
int b[]={1,2,3,4,5};
int *p=&b[2];
int p1=p[1];
int p_1=p[-1];