我无法编译那个简单的代码。为什么?
#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
是可移动分配的。这是因为如果你删除了不在deque开头或结尾的东西,它将不得不把所有的东西都移动过来(这在包含有 const
).
您可以使用 std::deque<T>::pop_front()
代替,这样就可以了,因为它只需要破坏一个元素。