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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
#1

АТД список. Сравнение элементов - C++

25.09.2011, 21:25. Просмотров 1440. Ответов 5
Метки нет (Все метки)

Здравствуйте!!

Тут возникла такая проблема!

Подскажите пожалуйста каким образом можно сравнить элементы списка в цикле!!!

В коментари кода написано где бы желательно провести сравнение элементов! Спасибо!


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "iostream"
#include <list>
 
using std::list;
using std::cout;
using std::cin;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");//руский щрифт в консоле
    int n;
    char num;
    
    list<char> l; //объявили список
 
    cout << "Введите длину списка: ";
    cin >> n;
/**********************************заполнение списка********************************************/
    cout << "Введите содержимое списка: ";
    for(int i = 0; i < n; i++)
    {   
        cin >> num;
        l.push_front(num);
    }
/**********************************конец заполнение списка********************************************/  
 
    
    for(list<char>::iterator iter1 = l.begin(); iter1 != l.end(); iter1++)
    {
        // как тут сравнить два элемента списка
    }
    cout << "\n";
 
    system("pause >> NULL");
    return 0;
}
Спасибо!))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 21:25     АТД список. Сравнение элементов
Посмотрите здесь:

C++ АТД-однонаправленный список
АТД список. Объединение списков. C++
C++ АТД список. Расположение одинаковых элементов друг за другом
АТД список. Замена элементов в списке C++
C++ АТД список. Перемещение заданного элемента на первую позицию
C++ Атд список. Удалить одинаковые элементы.
АТД список. Переставить местами элементы списка C++
C++ АТД список. Заменить меньшую часть списка символом "#"
C++ АТД список. Выделить скобками все двойные вхождения символов
C++ Реализуйте АТД “Список” для любого типа данных
C++ Разработать абстрактный тип данных (АТД) «Двусвязный циклический список»

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
emilen
10 / 10 / 0
Регистрация: 25.05.2010
Сообщений: 52
25.09.2011, 21:54     АТД список. Сравнение элементов #2
Вы не написали какие элементы списка нужно сравнивать?! А вообще это делается с помощью итераторов, можно например сравнить так элемент в списке с предыдущим.
C++
1
2
3
4
5
6
7
8
9
10
list<char>::iterator j;
for (list<char>::iterator i = l.begin(); i != l.end(); ++i)
{
     if (i == l.begin()) ++i;
     j = i;
     --j;
     if (*i == *j) {
          // тут что нибудь делаем если равны
     }
}
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
25.09.2011, 22:04  [ТС]     АТД список. Сравнение элементов #3
emilen, вы угадали мне именно так и надо было!!! Все четко работает!!

И подскажите теперь как удалить один из этих равных элементов!

Спасибо!
emilen
10 / 10 / 0
Регистрация: 25.05.2010
Сообщений: 52
25.09.2011, 22:14     АТД список. Сравнение элементов #4
Это выполняется функцией erase, у нее несколько параметров. Удалить один можно так.
C++
1
l.erase(i)
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
25.09.2011, 22:31  [ТС]     АТД список. Сравнение элементов #5
Вот окончательный вариант

Условие:

Для каждого элемента списка L, удалить все его повторения, следующие непосредственно за ним.
Например, исходный список: (a a r d a a a r ), результат: (a r d a r)

Решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "iostream"
#include <list>
 
using std::list;
using std::cout;
using std::cin;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"");//руский щрифт в консоле
    int n;
    char num;
    
    list<char> l; //объявили список
 
    cout << "Введите длину списка: ";
    cin >> n;
/**********************************заполнение списка********************************************/
    cout << "Введите содержимое списка: ";
    for(int i = 0; i < n; i++)
    {   
        cin >> num;
        l.push_back(num);
    }
/**********************************конец заполнение списка********************************************/  
 
    list<char>::iterator j;
    for(list<char>::iterator iter1 = l.begin(); iter1 != l.end(); iter1++)
    {
        if (iter1 == l.begin()) //сравниваем элементы
            ++iter1;
 
        j = iter1;
    --j;
    if (*iter1 == *j) 
    {
        l.erase(j); // удалеем элемент
    }
    }
    cout << "\n";
 
/**********************************Выводим список********************************************/  
    cout << "Cписок без повторяющихся элементов: ";
 
    for(list<char>::iterator iter1 = l.begin(); iter1 != l.end(); iter1++)
    {
        cout << *iter1 << " ";
    }
    cout << "\n";
 
    system("pause >> NULL");
    return 0;
}
Может быть кому то понадобиться!)))
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.09.2011, 13:53     АТД список. Сравнение элементов #6
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Для каждого элемента списка L, удалить все его повторения, следующие непосредственно за ним.
Зачем велосипеды изобретать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
 
int main()
{
   char str[] = "aaaabbbcccccdddd";
   
   std::list<char> list(str, str + sizeof(str) / sizeof(*str) - 1);
   
   list.erase( std::unique( list.begin(), list.end() ), list.end() );
   
   std::copy( list.begin(), list.end(), std::ostream_iterator<char> (std::cout, " ") );
}
http://liveworkspace.org/code/ad9f00...bf82b6c1132d2b
Yandex
Объявления
26.09.2011, 13:53     АТД список. Сравнение элементов
Ответ Создать тему
Опции темы

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