迭代器的递减总是不能从end()开始

时间:2019-05-30 21:03:54

标签: c++ iterator decrement

我的程序是c ++,可以在ARM / Linux程序上运行。我有一个双向迭代器(3个元素)。递减从end()开始不起作用,但是从中间元素开始。 如果从begin()开始递增,则可以访问所有元素。但是,如果我从end()递减,它并不总是有效

我写了一个非常简单的测试程序,使用相同的编译器编译,包含相同的代码,但从end()递减总是可以的。 但是,如果我将相同的代码放入项目中的模块中(该模块被多次调用),则它并不总是有效。有时返回11,而不是返回33。

我的公司将编译器从g ++ 4切换到g ++ 8时发生了问题。我怀疑这与内存对齐问题有关。

{
    std::map<int,int> mymap;
    mymap[11] = 100;
    mymap[22] = 200;
    mymap[33] = 300;
    int result;

    std::map<int,int>::const_iterator it = mymap.end();
    --it;
    printf("%d\n", (*it).first);

    std::map<int,int>::reverse_iterator itr = mymap.rbegin();
    printf("%d\n, (*itr).first);

    for (std::map<int,int>::const_iterator itf = mymap.begin(); itf != mymap.end(); itf++)
    {
          result = (*itf).first;
    }
    printf("%d\n, result);

    mymap.clear();
}

我希望输出始终为33、33、33。但是有时,输出为11、11、33。 从begin()开始总是有效,而从end()或rbegin()开始并不总是有效。

0 个答案:

没有答案