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