struct Item
{
int i;
std::vector<Item> group;
}
std::list
Как получить итератор определенного по счету элемента? Для вектора прокатывает vector.begin() + i... как это сделать для листа?
Только последовательным перебором - это уже заложено в сам АТД "список". Каждый элемент знает только своих соседей. Оптимизировать можно выбором конца, с которого делать перебор. Но, как правило, если нужен произвольный доступ к элементам, то список не используют. Почему не устраивает вектор?
Про различия stl-контейнеров и по каким критериям их выбирать неплохо написано у Мейерса "Эффективное использование STL". В инете легко находится.
Цитата: vAC
Почему не устраивает вектор?
Попробую объяснить...
На данный момент используется вектор... но появилась проблема...
Задача примерно сделующая (упрощенно):
есть структура
Код:
И допустим есть следующая структура:
Код:
item1 <-- для этого элемента есть итератор, допустим it1
--item2 <-- аналогично it2
--item4 <-- it4
--item3
--item2 <-- аналогично it2
--item4 <-- it4
--item3
Нужно переместить item4 в item1... т.е. получить следующую структуру:
Код:
item1
--item2
--item3
--item4
--item2
--item3
--item4
Я делаю:
Код:
Item newItem = *it4;
it1->group.push_back(newItem);
it2->group.erase(it4);
it1->group.push_back(newItem);
it2->group.erase(it4);
Так вот... после it1->group.push_back(newItem); итератор it2 просто теряется... в чем проблема не могу понять :(
Цитата: specter
Так вот... после it1->group.push_back(newItem); итератор it2 просто теряется... в чем проблема не могу понять :(
при каждом изменении вектора (удаление\добавление) все итераторы становятся недействительными, те надо заново их определять