码迷,mamicode.com
首页 > 其他好文 > 详细

reverse_iterator

时间:2019-03-08 11:09:38      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:一个   不用   vector   应该   osi   报错   else   随机种子   code   

每个容器都有反向迭代器(无需关联容器除外),reverse_iterator要和std::rbegin()以及std::end()配套使用,否则用了方向迭代器而不用rbegin()和rend()编译器是会报错的;接下来看例子:

#include <iostream>
#include <vector>
#include <time.h>
int main(int argc, char ** argv)
{
    std::vector<int> vec;
    int _data = 0;
    srand(time(NULL));
    for (int i = 0; i < 10; ++i)
    {
        vec.push_back(rand() % 100);
    }
    for (std::vector<int>::iterator iter = std::begin(vec);iter != std::end(vec);++iter)
    {
        std::cout << *iter << " ";
    }
    std::cout << std::endl;

    std::cout << "input you want find data : ";
    std::cin >> _data;

    auto result = std::find(std::begin(vec), std::end(vec), _data);
    if (result != std::end(vec))
    {
        std::cout << "find this data and the position is : " << result - std::begin(vec) << std::endl;
    }
    else
    {
        std::cout << "no find !" << std::endl;
    }

    //revser_iterator,如果是用std::begin()他就会报错
    for (std::vector<int>::reverse_iterator reiter = std::rbegin(vec); reiter != std::rend(vec); ++reiter)
    {
        std::cout << *reiter << " ";
    }
    std::cout << std::endl;
    auto result1 = std::find(std::rbegin(vec), std::rend(vec), _data);
    if (result1 != std::rend(vec))
    {
        std::cout << "find this data and the position is : " << result1.base()-std::begin(vec) - 1 << std::endl;

    }

    return 0;
}

rbegin()返回的是最后一个元素的reverse_iterator,rend()返回的是第一个元素的前一个元素,这里和begin()和end()有所区别,begin()返回的是第一个元素,end()返回的是最后一个元素的后一个元素;

再则就是reverse_iterator.base()返回的reverse_iterator()的后面一个元素;所以为了得到元素的具体位置就应该是base() - begin() - 1;

运行的结果可以是这样(结果是不一定的因为采用了随机种子):

24 90 77 97 50 65 45 25 95 97
input you want find data : 65
find this data and the position is : 5
97 95 25 45 65 50 97 77 90 24
find this data and the position is : 5
请按任意键继续. . .

这里的位置是索引位置

reverse_iterator

标签:一个   不用   vector   应该   osi   报错   else   随机种子   code   

原文地址:https://www.cnblogs.com/boost/p/10494486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!