簡體   English   中英

無法編譯 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() ,這將起作用,因為它只需要破壞一個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM