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

问题描述 投票:2回答:1

我无法编译那个简单的代码。为什么?

#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;,都编译得很好。

c++ const deque
1个回答
2
投票

std::deque<T>::erase(const_iterator) 要求 T 是可移动分配的。这是因为如果你删除了不在deque开头或结尾的东西,它将不得不把所有的东西都移动过来(这在包含有 const).

您可以使用 std::deque<T>::pop_front() 代替,这样就可以了,因为它只需要破坏一个元素。

© www.soinside.com 2019 - 2024. All rights reserved.