Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > удаление из вектора по индексу?


Автор: _hunter 3.4.2004, 17:09
как удалить из ветора элемент по индексу?

когда я пытаюсь, пишет: [C++ Error] E2285 Could not find a match for '_STL::vector<Cfields,_STL::allocator<Cfields> >::erase(int)'

Заранее благодарю за ответ.

Автор: srd 3.4.2004, 17:57
Ну, например vec.erase(vec.begin() + index);

Автор: mr.DUDA 3.4.2004, 21:53
Цитата
Ну, например vec.erase(vec.begin() + index);

или например,
Код
int index = 2;
vec.erase(&vec.at(index));


Автор: FreshMeat 5.4.2004, 12:07
В общем случае неверно.
Метод erase принимает в качестве параметра iterator. Код работает потому, что в используемой Вами реализации STL итератор является указателем.
Код

std::vector<unsigned>::iterator it = vec.begin();
std::advance( it, index );
vec.erase( it );

Автор: srd 5.4.2004, 14:03
Пофиг, является ли итератор указателем или нет, т.к. для итераторов вектора должны быть определены операторы прибавления целого, вычитания целого, инкремента и декремента, результатом которых является итератор. Поэтому в общем случае всё верно. Кстати, в VC++.NET 2003, с которой я работаю, итераторы вектора не являются указателями.

Автор: mr.DUDA 5.4.2004, 14:27
FreshMeat, в общем да, я насчёт "erase(&at(..." погорячился biggrin.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)