双端队列迭代器不可递减

时间:2018-06-25 07:53:27

标签: c++ visual-c++

我尝试使用MSVC 2017运行此代码:

#include <vector>
#include <deque>

class StripPtR {
public:
    int i;
    StripPtR (int i) : i(i) {}
};

typedef std::deque<StripPtR> StripType;
typedef std::vector<StripType> StripsType;

int main(int, char**) {
    StripType a{ {1}, {2}, {3} };

    a.insert(a.end(), a.rbegin() + 1, a.rend());

    return 0;
}

我收到此错误:

双端队列迭代器不可递减

Error

该错误在运行时发生。在编译期间,没有错误或警告。

相同的代码在GCC上可以正常工作。

怎么了?

1 个答案:

答案 0 :(得分:1)

std::deque::insert说:

  

所有迭代器(包括过去的迭代器)均无效。

MSVC版本可能会循环执行,递增/递减first(或代码中的a.rbegin() + 1),这意味着插入有效,但随后这些迭代器无效并导致运行时错误。此版本导致无法将迭代器传递到insert所在的容器中。