【发布时间】:2013-04-05 22:57:42
【问题描述】:
我相信从 C++11 开始,大多数容器的 erase 函数(例如 std::vector)都接受 const_iterator 作为参数:
iterator erase (const_iterator position);
即使使用--std=c++11 编译,我的编译器(GCC 4.8 和 Clang 3.2,都使用 GCC libstdc++)仍然不允许我使用这样的函数。
这是编译器/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;
}
【问题讨论】:
-
这似乎是标准库实现的问题,而不是编译器本身
-
@Andy:是的,如果不是我的错,很可能是 libstdc++。我仍然很惊讶这是 libstdc++(或编译器,无论如何)的问题,因为我可以找到许多关于擦除
const_iterator的问题,但所有都早于 C++ 11...
标签: c++ c++11 stdvector erase const-iterator