c ++ 11:使用const_iterator擦除

peo*_*oro 8 c++ erase stdvector const-iterator c++11

我相信自从C++ 11以来erase,大多数容器的功能(例如std::vector)接受一个const_iteratoras参数:

iterator erase (const_iterator position);
Run Code Online (Sandbox Code Playgroud)

我的编译器(GCC 4.8和Clang 3.2,都使用GCC libstdc ++)仍然不允许我使用这样的功能,即使在编译时也是如此--std=c++11.

它是编译器/ libstdc ++错误,还是我做了坏事?这是一个示例代码:

#include <vector>

int main( )
{
    std::vector<int> v;
    v.push_back( 1 );
    v.push_back( 2 );
    v.push_back( 3 );

    std::vector<int>::const_iterator i = v.begin();
    while( i != v.end() ) {
        i = v.erase( i );
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

use*_*984 7

此问题在此处记录,现在报告为部分实现.

CTRL + F使用您的浏览器并搜索N2350.

如果您使用的是Linux,则可以libcxx从LLVM项目构建库的开发版本,您可以从此处下载; 我不知道这是否能解决您遇到的任何问题,但我建议将其作为替代方案libstdc++.