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++,

Другие вопросы по тегам