У меня возникла проблема с использованием функции стирания на C++.C++: использование стирания в векторе итераторов
I имеет следующую структуру:
typedef std::map<std::string,TreeElement> ObjMap;
class TreeElement {
public:
ObjMap::const_iterator parent;
std::vector<ObjMap::const_iterator > children;
}
Теперь я пытаюсь удалить TreeElement из списка детей своего родителя с помощью функции стирания.
//Remove from parent
SegmentMap::const_iterator parent = segment->second.parent;
std::vector<SegmentMap::const_iterator >::const_iterator it = parent->second.children.begin();
for(;((*it)->first != segment->first) && (it != parent->second.children.end()); it++);
parent->second.children.erase(it); //Compilation fails
Это дает ошибку во время компиляции, указывающий, что не может преобразовать
__gnu_cxx::__normal_iterator<const std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> >*, std::vector<std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> > > >
в
__gnu_cxx::__normal_iterator<std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> >*, std::vector<std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, TreeElement> > > >
Есть ли способ исправить это? Я попытался с помощью итератора вместо того, чтобы const_iterator, но это просто переместил ошибку компиляции в
std::vector<SegmentMap::const_iterator >::iterator it = parent->second.children.begin();
Разъяснения: Я знаю, что функция стирания ожидает неконстантный итератор. Я ищу способ создания этого неконстантного итератора без изменения объявления родителя и детей в классе TreeElement.
И есть ли способ создать неконстантный итератор без изменения объявления родителя? – user1611565
@ пользователь1611565 nope. Вы могли бы, конечно, отбросить 'const', но это очень уродливо. Почему вы все равно хотите использовать const_interator, в коде нет ничего, что бы запретить использовать обычный итератор. –
В настоящее время я добавляю методы к существующей системе, в этом случае метод удаления. Я не должен менять класс TreeElement. – user1611565