无法编译 C++ deque.erase() 调用

Cannot compile C++ deque.erase() call

我不能编译那个简单的代码。为什么?

#include <iostream>
#include <deque>
#include <functional>
#include <utility>

int main() {
    std::deque<std::pair<const int, int>> dq;

    // problem with that line
    dq.erase(dq.begin());

    return 0;
}

我在 WSL Ubuntu 18.04.2 LTS 上使用 GCC 7.4.0 版。

如果我将 dq 定义为 std::deque<std::pair<int, int>> dq;,所有编译都很好。

std::deque<T>::erase(const_iterator) 要求 T 可移动。这是因为如果你删除了一些不在双端队列开始或结束的东西,它就必须把所有东西都移过去(你不能用包含 const 的对来做)。

您可以改用 std::deque<T>::pop_front(),因为它只需要销毁一个元素即可。