Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

std::list

13K
12 октября 2007 года
specter
113 / / 28.09.2007
Как получить итератор определенного по счету элемента? Для вектора прокатывает vector.begin() + i... как это сделать для листа?
505
12 октября 2007 года
vAC
343 / / 28.02.2006
Только последовательным перебором - это уже заложено в сам АТД "список". Каждый элемент знает только своих соседей. Оптимизировать можно выбором конца, с которого делать перебор. Но, как правило, если нужен произвольный доступ к элементам, то список не используют. Почему не устраивает вектор?
31K
12 октября 2007 года
volga
15 / / 09.10.2007
Это специально сделано, чтобы для листа такое не прокатывало по соображениям эффективности. Если тебе нужен произвольный доступ к элементу, то, как правильно заметил vAC, выбирай другой контейнер.
Про различия stl-контейнеров и по каким критериям их выбирать неплохо написано у Мейерса "Эффективное использование STL". В инете легко находится.
13K
12 октября 2007 года
specter
113 / / 28.09.2007
Цитата: vAC
Почему не устраивает вектор?


Попробую объяснить...
На данный момент используется вектор... но появилась проблема...
Задача примерно сделующая (упрощенно):
есть структура

 
Код:
struct Item
{
    int i;
    std::vector<Item> group;
}

И допустим есть следующая структура:
 
Код:
item1 <-- для этого элемента есть итератор, допустим it1
--item2 <-- аналогично it2
   --item4 <-- it4
--item3

Нужно переместить item4 в item1... т.е. получить следующую структуру:
 
Код:
item1
--item2
--item3
--item4

Я делаю:
 
Код:
Item newItem = *it4;
it1->group.push_back(newItem);
it2->group.erase(it4);

Так вот... после it1->group.push_back(newItem); итератор it2 просто теряется... в чем проблема не могу понять :(
14K
12 октября 2007 года
stimpi
100 / / 04.09.2007
Цитата: specter

Так вот... после it1->group.push_back(newItem); итератор it2 просто теряется... в чем проблема не могу понять :(



при каждом изменении вектора (удаление\добавление) все итераторы становятся недействительными, те надо заново их определять

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог