libstdc++实现c++ 11 deque接口

Do libstdc++ implement C++11 deque interface?

本文关键字:deque 接口 c++ 实现 libstdc++      更新时间:2023-10-16

我很少有使用GCC和libstdc++的经验。试图在c++ 11中编译一个非常简单的程序,我发现编译器错误,看起来STL没有实现新的c++ 11 deque接口。

示例程序:
#include <deque>
int main() {
   std::deque<int> c;
   std::deque<int> d;
    c.insert(c.cbegin(), d.begin(), d.end()); // unable to match insert(const_iterator, iterator, iterator)
    auto it=c.insert(c.begin(), d.begin(), d.end()); // unable to match iterator = insert(iterator, iterator, iterator)
}

运行以下命令行,在注释行中得到编译错误:

g++ -std=c++11 -o test test.cpp

(gcc/libstdc++的安装版本为4.8.1)

看起来STL没有实现:

template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last );

(http://en.cppreference.com/w/cpp/container/deque/insert,或std. C+11 23.3.3.4 deque modifiers)

我知道libstdc++还没有完全实现c++ 11,但是状态页面(http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011)表明只有分配器和传播需求还没有完成。

我的问题是:

  • 实际上在libstdc++中没有一个完整的c++ std::deque接口实现,还是我错过了什么?(也许我没有使用正确的库版本,或者我在命令行中缺少一些参数;我对gcc/g++没有太多的经验。
  • 如果是我的错,我该如何解决?

您的代码是有效的,并且已被GCC 4.9.0的libstdc++接受(并且已被clang的libc++接受了一段时间)。您链接到的状态页对此发出警告:

本页描述了主流GCC SVN中对c++ 11的支持,而不是在任何特定的发行版中。