Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Bob103
8 / 8 / 3
Регистрация: 23.09.2015
Сообщений: 251
Завершенные тесты: 3
#1

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

07.07.2016, 10:45. Просмотров 249. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исключить все повторяющиеся, идущие подряд элементы дека (C++):

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

Найти в массиве подряд идущие элементы - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

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

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

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

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

8
HenryDukart
123 / 123 / 35
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
07.07.2016, 10:58 #2
Цитата Сообщение от Bob103 Посмотреть сообщение
Создать список
Не deque, а list. С ним легче решить эту задачу.
0
Bob103
8 / 8 / 3
Регистрация: 23.09.2015
Сообщений: 251
Завершенные тесты: 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
123 / 123 / 35
Регистрация: 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 / 3
Регистрация: 23.09.2015
Сообщений: 251
Завершенные тесты: 3
07.07.2016, 11:24  [ТС] #5
Так,всё равно оставляет из "111"->"11"
0
HenryDukart
123 / 123 / 35
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
07.07.2016, 11:28 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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 / 3
Регистрация: 23.09.2015
Сообщений: 251
Завершенные тесты: 3
07.07.2016, 11:42  [ТС] #7
Спасибо,то,что нужно Если не сложно,что за алгортим "unique"

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

Ну, удаляет, это грубо говоря. Скорее, перемещает в конец интервала.
1
Bob103
8 / 8 / 3
Регистрация: 23.09.2015
Сообщений: 251
Завершенные тесты: 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) - C++
У меня есть структура Card, в которой хранятся 2 переменные типа char - достоинство и масть карты. struct Card { char...

Идущие подряд числа - C++
Есть код, суть его в возведении числа в степень (ооочень большую степень - 3^3456), в результате тоже как бы число (массив), нужно...

Дан одномерный массив, элементы которого - целые числа. Удалите из него все повторяющиеся элементы, оставив только их первые вхождения. - C++
Добрый день!!! Не могли бы помочь отредактировать программу на с++? Дан одномерный массив, элементы которого - целые числа. Удалите из него...

В массиве A=(a1, а2, ., an) удалить все положительные элементы, имеющие четный порядковый номер, идущие после минимального элемента массива - C++
В массиве A=(a1, а2, ..., an) удалить все положительные элементы, имеющие четный порядковый номер, идущие после минимального элемента...


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

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

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