以下是导致问题的原因的示例:
#include <deque>
int main() {
std::deque<int> has_data = {1, 2, 3};
std::deque<int>::iterator iter1 = has_data.begin() + 5; // This works fine
std::deque<int> had_data = {4, 5, 6};
had_data.clear();
std::deque<int>::iterator iter2 = had_data.begin() + 5; // This also works fine
std::deque<int> is_empty;
std::deque<int>::iterator iter3 = is_empty.begin() + 5; // This causes a segfault
}
Run Code Online (Sandbox Code Playgroud)
如果双端队列之前从未包含任何元素,则添加到空双端队列的迭代器似乎只是一个问题。
我很好奇这是否是 STL 中的错误,或者我是否只是以导致未定义行为的方式使用它。我只在使用 Xcode(GUI 和命令行)编译时遇到这个问题。我也在 Linux 上使用 GCC 6.2.0 版尝试过它,但那里似乎不存在问题。