以下是导致问题的示例:
#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
}
如果双端队列以前从未包含任何元素,则添加到空双端队列的迭代器似乎是一个问题。
我很好奇这是否是 STL 中的错误,或者我只是以一种导致未定义行为的方式使用它。我只在使用 Xcode(GUI 和命令行)编译时遇到这个问题。我也在 Linux 上使用 GCC 版本 6.2.0 进行了尝试,但问题似乎并不存在。