c ++ 11:使用const_iterator擦除

时间:2013-04-13 12:40:13

标签: c++ c++11 stdvector erase const-iterator

我相信自从C ++ 11以来,大多数容器的erase函数(例如std::vector)接受const_iterator作为参数:

iterator erase (const_iterator position);

我的编译器(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;
}

1 个答案:

答案 0 :(得分:7)

此问题已记录here,现在报告为部分实施。

CTRL + F 与您的浏览器并搜索N2350

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