无法编译 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()
,因为它只需要销毁一个元素即可。
我不能编译那个简单的代码。为什么?
#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()
,因为它只需要销毁一个元素即可。