Я считаю, что с 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;
}
Эта проблема задокументирована Вот и пока что это частичная реализация.
CTRL + F с вашим браузером и поиск N2350
,
Если вы работаете в Linux, вы можете создать разрабатываемую версию libcxx
библиотека из проекта LLVM, которую вы можете скачать с Вот; Я не знаю, решает ли это какие-либо проблемы, с которыми вы сталкиваетесь, но я предлагаю это в качестве альтернативы libstdc++
,
Других решений пока нет …