小编yot*_*cal的帖子

是否可以在 C++ 中添加到空双端队列的迭代器中?

以下是导致问题的原因的示例:

#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 版尝试过它,但那里似乎不存在问题。

c++ iterator stl stddeque c++17

1
推荐指数
1
解决办法
87
查看次数

标签 统计

c++ ×1

c++17 ×1

iterator ×1

stddeque ×1

stl ×1