我尝试使用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;
}
我收到此错误:
双端队列迭代器不可递减
该错误在运行时发生。在编译期间,没有错误或警告。
相同的代码在GCC上可以正常工作。
怎么了?
答案 0 :(得分:1)
std::deque::insert
说:
所有迭代器(包括过去的迭代器)均无效。
MSVC版本可能会循环执行,递增/递减first
(或代码中的a.rbegin() + 1
),这意味着插入有效,但随后这些迭代器无效并导致运行时错误。此版本导致无法将迭代器传递到insert
所在的容器中。