Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
vvm28
Учусь всегда.
439 / 55 / 25
Регистрация: 22.12.2013
Сообщений: 405
Записей в блоге: 11
Завершенные тесты: 1
1

Имеется класс TAddList, унаследованный от stl-класса списка. Требуется написать метод добавления

23.01.2018, 00:14. Просмотров 814. Ответов 5

Здравствуйте уважаемые специалисты.
Помогите пожалуйста с решением задачи.

Задача : "Имеется класс TAddList, унаследованный от stl-класса списка. Требуется написать метод добавления такой, чтобы:
Если последний элемент такой же, как и добавляемый, вместо добавления значение последнего элемента инкрементировалось.
Иначе – добавление происходило как обычно.
C++
1
2
3
4
5
6
7
8
TAddList: public list < int >
{
  public:
 
  void AddToEnd ( const int & iValue )
  {
  }
}
"

Вот что я написал :
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
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
 
class TAddList:list<int>{
public:
 void AddToEnd ( const int & iValue )
  {
// тут нужно как-то обратиться к последнему элементу
if(pop_back() == iValue) // как -то так ... как тут считывать последний элемент?
последний_элемент++; // но как его достать и вставить на тоже место
    else push_back(iValue); // 
  }
 
};
int main()
{
TAddList tAddList;// 
 
 tAddList.AddToEnd(123); // такое работает , однако как вывести?
 copy(tAddList.begin(),tAddList.end(),ostream_iterator<int>(cout," "));  //Вывод на экран моей конструкции не получается
 return 0;
}
Заранее спасибо за участие.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2018, 00:14
Ответы с готовыми решениями:

Написать класс Список с методом добавления элемента в конец списка
Возник Вопрос: а как сделать так сказать бесконечное добавление элементов, то есть за раннее не...

Метод STL size и инициализация списка
Всем доброго вечера! Вот код#include &lt;fstream&gt; // для потоковых файловых функций #include...

Написать два класса с методами. Без использования STL
Надеюсь на вашу помощь, т.к. с С++ не знаком. Думаю новичкам будет отличной задачей для...

Не получается создать объект унаследованный от абстрактного класса
Здравствуйте! Нужна помощь с виртуальными функциями, в теории понимаю что это, а вот с...

Некорректно работает унаследованный метод класса
Всем доброго времени суток. Есть класс List #include &lt;cstdlib&gt; #include &lt;iostream&gt; using...

5
Selot
189 / 125 / 52
Регистрация: 19.01.2010
Сообщений: 508
Завершенные тесты: 2
23.01.2018, 00:41 2
наследоваться от листа - плохая идея, у него нет виртуальных функций и деструктора. Если и наследоваться, то чрез приватное наследование, либо через агрегацию делать.
Доступ к последнему элементу листа обычно через метод back(), можно через итератор it = end(); --it;, либо через итератор rbegin();
0
Lambont
92 / 91 / 61
Регистрация: 23.11.2013
Сообщений: 242
23.01.2018, 00:50 3
Лучший ответ Сообщение было отмечено vvm28 как решение

Решение

C++
1
2
3
4
5
6
7
void AddToEnd(const int & iValue)
{
    // тут нужно как-то обратиться к последнему элементу
    if (!empty() && back() == iValue) // как -то так ... как тут считывать последний элемент?
        ++back(); // но как его достать и вставить на тоже место
    else push_back(iValue); // 
}
1
vvm28
Учусь всегда.
439 / 55 / 25
Регистрация: 22.12.2013
Сообщений: 405
Записей в блоге: 11
Завершенные тесты: 1
23.01.2018, 10:14  [ТС] 4
Хорошо. Я делаю так.
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
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
 
class TAddList:list<int>{
public:
 void AddToEnd ( const int & iValue )
  {
 
   // тут нужно как-то обратиться к последнему элементу
    if (!empty() && back() == iValue) //
        ++back(); //
    else push_back(iValue); //
  }
 
};
int main()
{
TAddList tAddList;// = {4, 6, 3, 2};
 
 tAddList.AddToEnd(123);
 
 
 copy(tAddList.begin(),tAddList.end(),ostream_iterator<int>(cout," "));  //Вывод на экран ошибка вывода
 
 
    return 0;
}

И я не могу вывести. Ошибка.

Selot, Я понимаю что наследоваться от list плохая идея. Но задание звучит именно так.
Мои предположения : я неправильно наследовался от list в данном коде.
Могу ли я наследовать от шаблона как класс? Или как-то написать наследовать шаблон? Пока-что не получается.
0
Selot
189 / 125 / 52
Регистрация: 19.01.2010
Сообщений: 508
Завершенные тесты: 2
23.01.2018, 10:31 5
Лучший ответ Сообщение было отмечено vvm28 как решение

Решение

Наследоваться от шаблона можно. У вас в коде приватное и наследование, значит методы листа недоступны извне, в частности begin() и end(), оберните их вызов в своем классе как паблик
1
vvm28
Учусь всегда.
439 / 55 / 25
Регистрация: 22.12.2013
Сообщений: 405
Записей в блоге: 11
Завершенные тесты: 1
23.01.2018, 10:58  [ТС] 6
Selot, Спасибо. Всё получилось.
0
23.01.2018, 10:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2018, 10:58

Универсальный метод добавления экземпляра класса
Добрый день! Есть несколько классов, основными полями в которых являются Id и Description. Могут...

Требуется миграция БД, после добавления атрибутов и столбцов в класс модели предметной области
Всем привет. Создаю проект на примере из сайта professorweb. Я столкнулся с такой проблемой, что...

Создать унаследованный класс EventArgs
Необходимо создать класс MyEventArgs, унаследованный от EventArgs, с целью передачи обработчику...


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

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

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