zoukankan      html  css  js  c++  java
  • STL进阶--狡猾的反向迭代器

    反向迭代器

    两种声明反向迭代器的方法

    reverse_iterator<vector<int>::iterator> ritr;
    vector<int>::reverse_iterator ritr;
    

    用反向迭代器遍历

    vector<int> vec = {4,5,6,7};
    reverse_iterator<vector<int>::iterator> ritr;
    for (ritr = vec.rbegin(); ritr != vec.rend(); ritr++)
       cout << *ritr << endl;   // prints: 7 6 5 4
    

    迭代器<-->反向迭代器转换

    vector<int>::iterator itr;
    vector<int>::reverse_iterator ritr;
    
    ritr = vector<int>::reverse_iterator(itr);    //迭代器-->反向迭代器
    
    itr = vector<int>::iterator(ritr);  // 编译错误
    itr = ritr.base();      //返回什么?
    
    // C++标准说: base()返回当前的迭代器
    

    例子

    vector<int> vec = {1,2,3,4,5};
    vector<int>::reverse_iterator ritr = find(vec.rbegin(), vec.rend(), 3);
    
    
    cout << (*ritr) << endl;   // 3
    
    vector<int>::iterator itr = ritr.base();  
    
    cout << (*itr) << endl;   // 4 
    

    使用正向迭代器和反向迭代器可能产生不同的结果

    //插入,结果一样
    vec = {1,2,3,4,5};
    ritr = find(vec.rbegin(), vec.rend(), 3);
    
    //Inserting
    vec.insert(ritr, 9);         // vec: {1,2,3,9,4,5}
    // or
    vec.insert(ritr.base(), 9);  // vec: {1,2,3,9,4,5}
    
    
    vec = {1,2,3,4,5};
    ritr = find(vec.rbegin(), vec.rend(), 3);
    
    // 删除,结果不同
    vec.erase(ritr);    // vec: {1,2,4,5}  
    // or
    vec.erase(ritr.base());    // vec: {1,2,3,5}  
    
  • 相关阅读:
    Kaldi的data目录解析
    Kaldi的nnet3
    Kaldi中的Chain模型
    Karel版本的nnet1
    Dan版本的nnet2
    MFCC/Filter Bank的提取流程
    【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结
    App 设计技巧
    js判断是否在微信浏览器中打开
    WebApi 跨域
  • 原文地址:https://www.cnblogs.com/logchen/p/10204065.html
Copyright © 2011-2022 走看看