用常量迭代器从STL容器中擦除
Erasing from an STL container by a constant iterator
根据c++参考STL容器在c++ 11标准中被固定为在erase
方法中使用常量迭代器。以下代码在启用c++0x
的g++4.7中无法编译。
#include <vector>
int main()
{
std::vector<int> vector;
vector.push_back(0);
std::vector<int>::const_iterator vectorItr = vector.begin();
vector.erase(vectorItr);
}
显然新的签名没有实现。请问这个问题什么时候能解决?
In HERE:
: 23.3.6
描述:类模板向量
状态:部分
注释:插入和擦除成员不接受const_iterator参数(N2350)。
对于它的价值:我已经对GCC 4.8.1以及GCC 4.9(20130602快照)进行了测试,结果是4.8.1仍然存在这个问题(请注意,承诺的c++ 11遵从性与语言核心有关,而不是标准库),但是4.9快照正确编译它。
所以我想假设GCC 4.9一旦发布,将按照标准指定的方式处理这个问题是公平的。
查看gcc的库实现状态。在这里,它清楚地说明了所讨论的功能尚未实现:
23.3.6 -类模板vector - Partial - insert和erase成员不接受const_iterator实参(N2350)。
不出所料:因为它似乎还没有实现(即使在c++ 11模式下)。
最简单的检查方法是查看std::vector
的底层实现。尽管大多数方法签名可能相当晦涩难懂,但方法签名通常很容易阅读。
在GCC 4.8中给出了完整的c++ 11兼容性(而不是4.7)。
由于4.7未被授予完全兼容,因此不能将其视为(严格的技术术语)"错误"。可能是需要与其他尚未兼容的库模块保持一定的兼容性。
如果这发生在4.8中,那么它必须被认为是一个bug。但不是在4.7
相关文章:
- C++ STL 设置按值擦除
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 在 stl 中的字符串中擦除关键字的工作?
- 迭代时从 STL 容器中查找并擦除元素
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- STL矢量通过指针擦除
- 如何不擦除迭代器(从"Effective STL")
- 有没有一种方法可以防止在STL无序映射上插入或擦除
- 在C++STL映射上通过迭代器擦除
- STL 矢量擦除不起作用
- STL 关联容器:擦除并取回(不可复制的)元素
- STL 映射不会擦除
- STL 允许使用指向不同映射的迭代器擦除映射的键/值?
- 如何使用STL算法和函数按值擦除std::映射单元格
- 调整STL矢量的大小是否会擦除/使其以前的内容无效
- STL矢量擦除后的迭代器无效
- 用常量迭代器从STL容器中擦除
- c++ STL矢量擦除
- 按键擦除STL std::set元素时发生编译错误
- C++ STL 字符串擦除