Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
bounce
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 21
#1

итераторы в list - C++

09.05.2013, 18:34. Просмотров 1355. Ответов 6
Метки нет (Все метки)

привет, подскажите как реализовать поиск c двумя циклами в списке:
C++
1
2
3
4
5
for (list <Mc*>::iterator i = myList.begin (); i != myList . end () - 1; i++)
        for (list <Mc*>::iterator j = i + 1; j != myList . end (); j++)
        {
 
        }
как заменить i + 1 и i - 1?
и если из списка удаляется элемент, как потом восстановить итератор, что бы заново можно было кусок кода выше выполнить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 18:34     итераторы в list
Посмотрите здесь:

итераторы си++ - C++
подскажите пожалуйста какие существуют методы итераторов? и что они делают?

Итераторы - C++
При удалении элемента из списка (list) - ошибка list iterator not decrementable Что делать? for(Iter = npc.begin(); Iter !=...

Итераторы - C++
Как указать не на следующий за последним элемент последовательности, а на последний! end() - следующий за последним Добавлено через...

Итераторы в C++ - C++
Помогите плз решить 2 задачи Задача 1 Напишите программу, использующую итераторы при чтении последовательности строк со стандартного...

Итераторы С++ - C++
Как с помощью итераторов работать с массивом объектов класса? И что такое класс Итератор? П.С. Не через вектора

Итераторы - C++
Добрый день! Начал изучать классы в C++ параллельно с итераторами. Решил сделать простенькую программу, которая создаёт список классов....

Итераторы - C++
Всем добрый вечер! Есть небольшие затруднения , вот например фрагмент кода: //... multimap&lt;int,Point&gt; divisionP; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
09.05.2013, 19:20     итераторы в list #2
Примерно так:
C++
1
2
3
4
5
for (list<Mc *>::iterator i = myList.begin(), next = std::next(i); next != myList.end(); ++i, ++next)
   for (list<Mc *>::iterator j = next; j != myList.end(); ++j)
   {
 
   }
Добавлено через 2 минуты
Если нет std::next:
C++
1
2
3
4
5
for (list<Mc *>::iterator i = myList.begin(), next = i; ++next != myList.end(); ++i)
   for (list<Mc *>::iterator j = next; j != myList.end(); ++j)
   {
 
   }
Добавлено через 2 минуты
Цитата Сообщение от bounce Посмотреть сообщение
и если из списка удаляется элемент, как потом восстановить итератор
erase возвращает итератор на следующий элемент:
C++
1
it = list.erase(it);
bounce
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 21
10.05.2013, 00:18  [ТС]     итераторы в list #3
спасибо. первое работает, а второе не правильно описал проблему. почему-то само заработало

Добавлено через 4 часа 10 минут
елки, таки не работает. после
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (list <Lorenz *>::iterator i = sList.begin (), next = i; ++next != sList . end (); ++i)
{
    t1 = (*i) -> GetCurCoord ();
    for (list <Lorenz *>::iterator j = next; j != sList . end (); ++j)
    {
        t2 = (*j) -> GetCurCoord ();
        if (t1 [0] == t2 [0] &&
             t1 [1] == t2 [1] &&
             t1 [2] == t2 [2])
        {
            (*j) -> SetAdhesion (true);
            adTemp--;
        }
    }
}
не выполняется такой код
C++
1
2
3
4
5
for (list <Lorenz *>::iterator i = sList . begin (); i != sList . end (); ++i)
{
    if ((*i) -> GetAdhesion () == true)
        i = sList . erase (i);
}
говорит "expression: list iterator not incrementable". как исправить?
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
10.05.2013, 00:27     итераторы в list #4
Видимо так:
C++
1
2
3
4
5
6
7
for (list<Lorenz *>::iterator i = sList.begin(); i != sList.end(); ) {
   if ((*i)->GetAdhesion()) {
      i = sList.erase(i);
   } else {
      ++i;
   }
}
Добавлено через 2 минуты
Цитата Сообщение от bounce Посмотреть сообщение
говорит "expression: list iterator not incrementable"
erase возвращает указатель на следующий элемент, так что при удалении доп. инкремент явно лишний.
bounce
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 21
10.05.2013, 00:30  [ТС]     итераторы в list #5
от я глупый
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
10.05.2013, 00:33     итераторы в list #6
Вообще думаю можно заменить на такое (на память):
C++
1
sList.remove_if(std::mem_fun(&Lorenz::GetAdhesion));
Добавлено через 26 секунд
mem_fun в <functional>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2013, 00:51     итераторы в list
Еще ссылки по теме:

Итераторы С++ - C++
Помогите, пожалуйста, надо написать две программы Задача 1 Напишите программу, использующую итераторы при чтении последовательности...

итераторы - C++
ребят помогите плиз vector&lt;double&gt;::iterator t = matrix.begin(); vector&lt;double&gt;::iterator t1 = matrix.end(); for(;t&lt;t1;t++) ...

Итераторы - C++
От какого класса наследуются итераторы в STL? Например я создаю класс и для него нужен собственный итератор, совместимый с STL (более...

Итераторы - C++
Не могу въехать как работают итераторы, литература-форумы не помогли, увы. На 26й строке то, что не могу осилить. Прохожу по стеку...

Итераторы и указатели - C++
читаю книгу по c++,вот дошел до темы указателей и итераторов в книге как то непонятно написано,объясните пожалуйста следующие вопросы ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
bounce
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 21
10.05.2013, 00:51  [ТС]     итераторы в list #7
мне пока не до экспериментов таких(
Yandex
Объявления
10.05.2013, 00:51     итераторы в list
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru