添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • ++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();//iterator类型
    auto it2=cv.begin();//const_iterator类型
    auto it3=v.cbegin();//const_iterator类型
    

    注意:不能向范围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);//start指向首元素
    int *_end=end(bbb);//_end指向尾元素
    

    指针可以进行与迭代器一样的计算,与迭代器一样,指针的进行加减时一定要注意是否超出范围,否则会使整个程序崩掉

    ptrdiff_t是一种标准库的两个指针相减类型,与size_t一样,为有符号型

    下标和指针

    数组与指针结合,可以下标为负值,示例

    int b[]={1,2,3,4,5};
    int *p=&b[2];
    int p1=p[1];  //p1为4;
    int p_1=p[-1];//p_1为2;