Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Bob103
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 257
Завершенные тесты: 3
1

Исключить все повторяющиеся, идущие подряд элементы дека

07.07.2016, 10:45. Просмотров 855. Ответов 8
Метки нет (Все метки)

Создать список из целых чисел. Подсчитать количество пар соседних элементов, которые совпадают между собой. Оставить по одному из таких элементов, т.е. исключить все повторяющиеся, идущие подряд элементы.

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 <deque>
 
using namespace std;
 
int main()
{
    int n;
    cout << "Enter size:";
    cin >> n;
 
    deque <int> d1;
 
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        d1.push_front(x);
    }
    for (int k = 0; k < d1.size()-1;k++)
    {
        while (d1[k] == d1[k+1])
        {
            swap(d1[k], d1.back());
            d1.pop_back();
        }
    }
 
    for (int j = 0; j < d1.size(); j++)
    {
        cout << d1[j] << " ";
    }
 
    system("pause");
    return 0;
}
Выхожу за гарницы и не знаю,как удалить элементы,если например "111",оставляет только "11".Думал удалять через .erase,но не придумал,как через итератор удалять помогите
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2016, 10:45
Ответы с готовыми решениями:

Исключить из массива все повторяющиеся элементы
Дан массив. Допустим я ввожу элементы 1,2,3,2,4 И нужно создать новый массив...

Найти в массиве подряд идущие элементы
//--------------------------------------------------------------------------- ...

Исключить повторяющиеся элементы из списка
Не получается и всё тут! Удалять элементы умею из любой части списка, но вот...

В символьной строке удалить все лишние подряд идущие пробелы.
помогите пожалуйста написать программу:В символьной строке удалить все лишние...

В символьной строке удалить все лишние подряд идущие пробелы.
Помогите пожалуйста написать программу,Каким образом можно осуществить: В...

8
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
07.07.2016, 10:58 2
Цитата Сообщение от Bob103 Посмотреть сообщение
Создать список
Не deque, а list. С ним легче решить эту задачу.
0
Bob103
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 257
Завершенные тесты: 3
07.07.2016, 11:11  [ТС] 3
С list'ом уже делал,нужно с deque

Добавлено через 6 минут
Вот с итератором что-то
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
#include <iostream>
#include <deque>
 
 
using namespace std;
 
int main()
{
    deque <int> d1;
 
    int n;
    cout << "Enter size:";
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        d1.push_back(x);
    }
 
    for (int k = 0; k < d1.size()-1; k++ )
        {
            deque<int>::iterator j = d1.begin();
            if (d1[k] == d1[k+1])
            {
                advance(j, k);
                d1.erase(j);
            }
           
        }
 
    for (int k = 0; k < d1.size(); k++)
    {
        cout << d1[k] << " ";
    }
   
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Но также удаляет,только 1 символ из "111'->'11'
0
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
07.07.2016, 11:17 4
Bob103,
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
 
 
using namespace std;
 
template <typename T>
void print(const T& coll)
{
    copy(coll.cbegin(), coll.cend(),
        ostream_iterator<typename T::value_type>(cout, " "));
    cout << endl;
}
 
int main()
{
    deque<int> coll{ 1, 2, 2, 1, 1, 1, 5, 5, 0, 0, 0, 0 };
    print(coll);
    
    size_t sz = coll.size();
    deque<int>::iterator last = coll.begin(), next = last + 1;
    while (next != coll.end())
    {
        if (*last == *next)
        {
            last = coll.erase(next);
            if (last == coll.end())
                break;
        }
        else
            ++last;
        next = last + 1;
    }
 
    print(coll);
    cout << "Number of deleted pairs: " << sz - coll.size() << endl;
 
    return 0;
}
0
Bob103
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 257
Завершенные тесты: 3
07.07.2016, 11:24  [ТС] 5
Так,всё равно оставляет из "111"->"11"
0
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
07.07.2016, 11:28 6
Лучший ответ Сообщение было отмечено Bob103 как решение

Решение

Bob103, я так и делал, потому что условие понял именно так. Если вам надо, чтобы из "11...1"->"1", то код будет еще легче:

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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
 
 
using namespace std;
 
template <typename T>
void print(const T& coll)
{
    copy(coll.cbegin(), coll.cend(),
        ostream_iterator<typename T::value_type>(cout, " "));
    cout << endl;
}
 
int main()
{
    deque<int> coll{ 1, 2, 2, 1, 1, 1, 5, 5, 0, 0, 0, 0 };
    print(coll);
    
    size_t sz = coll.size();
    coll.erase(unique(coll.begin(), coll.end()), coll.end());
    print(coll);
    cout << "Number of deleted pairs: " << sz - coll.size() << endl;
 
    return 0;
}
1
Bob103
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 257
Завершенные тесты: 3
07.07.2016, 11:42  [ТС] 7
Спасибо,то,что нужно Если не сложно,что за алгортим "unique"

Добавлено через 4 минуты
Он удаляет дубликаты из последовательности?
0
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
07.07.2016, 11:43 8
Bob103, с примером http://www.cplusplus.com/reference/algorithm/unique/

Ну, удаляет, это грубо говоря. Скорее, перемещает в конец интервала.
1
Bob103
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 257
Завершенные тесты: 3
07.07.2016, 11:46  [ТС] 9
Спасибо
0
07.07.2016, 11:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2016, 11:46

Дан текстовый файл. Заменить в нем все подряд идущие пробелы на один пробел.
Помогите новечку! Дан текстовый файл. Заменить в нем все подряд идущие пробелы...

Вывести на экран все элементы дека (deque)
У меня есть структура Card, в которой хранятся 2 переменные типа char -...

Шаблонная функция которая в «строке» заменяет все повторяющиеся подряд символы
Помогите выполнить задачу. В произвольной «строке» заменить все повторяющиеся...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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