Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/32: Рейтинг темы: голосов - 32, средняя оценка - 4.81
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

Стек на шаблонах - оцените реализацию

17.07.2014, 00:21. Показов 7846. Ответов 101
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
просто хочу узнать чужое мнение, написал стек через шаблоны, оцените реализацию
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
template <typename T>
class Stack
{
private:
    size_t size;
    T* data;
public:
    Stack();
    void Push(T value);
    T Pop();
};
 
template <typename T>
Stack<T>::Stack()
{
    size = sizeof(T);
    data = new T;
}
 
template <typename T>
void Stack<T>::Push(T value)
{
    data = data + size;
    *data = value;
}
 
template <typename T>
T Stack<T>::Pop()
{
    int tmp = *data;
    data = data - size;
    T* ptr = data + size;
    ptr = nullptr;
    return tmp;
}
Добавлено через 1 минуту
з.ы. сначала пытался париться как это в идеале надо prev, next (т.е. предыдущий и следующий элементы) потом забил, толку с них никакого, все равно по смещению ищу значение
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2014, 00:21
Ответы с готовыми решениями:

Сделать реализацию list (классы node и list) на шаблонах
Помогите написать прогу Необходимо: Сделать реализацию list (классы node и list) на шаблонах. 1.push_back 2.push_front 3.size ...

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

Оцените реализацию Угадывателя чисел
И вопрос на засыпку, можно ли как то максимально оптимизировать данный процесс? Если да, то как. Понимаю, книги и все такое , но вместе с...

101
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
17.07.2014, 20:25  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 0x10 Посмотреть сообщение
Теперь value в Pop не используется и 100% ведет к утечкам.
тьфу забыл
C++
1
2
3
4
5
6
7
8
template <typename T>
void Stack<T>::Pop()
{
    if (!head) throw std::out_of_range("Access to element of empty container");
    NODE *tmp = head;
    head = head->prev;
    delete tmp;
}

Не по теме:

а нехило мы развернулись на 9 страниц :D



Добавлено через 2 минуты
з.ы. вроде теперь все ок уже? итоговая оценка =)
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.07.2014, 20:57
Цитата Сообщение от GetHelp Посмотреть сообщение
C++
1
2
template <typename T>
void Stack<T>::Push(T value)
а push все так же принимает value по значениею

Цитата Сообщение от GetHelp Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
template <typename T>
T Stack<T>::Peek()
{
    if (head)
        return head->data;
    else
        throw std::out_of_range("Access to element of empty container");
}
код в стиле кодогенератора...какой может быть else после return
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
17.07.2014, 21:12  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
а push все так же принимает value по значениею
эмм а с этим то какие проблемы? как вы еще собираетесь добавлять элемент в стек как не через параметр функции?
Цитата Сообщение от Jupiter Посмотреть сообщение
код в стиле кодогенератора...какой может быть else после return
а какие с этим проблемы? по мне так все нормально...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
17.07.2014, 21:16
Цитата Сообщение от GetHelp Посмотреть сообщение
эмм а с этим то какие проблемы? как вы еще собираетесь добавлять элемент в стек как не через параметр функции?
Передать по константной ссылке. Сейчас при добавлении объекта в стек происходит два копиросания. Первое - при передаче параметра, второе - парой строк ниже, при присваивании.

Цитата Сообщение от GetHelp Посмотреть сообщение
а какие с этим проблемы? по мне так все нормально...
Проблема стилистическая, противоречит логичности кода. После return последующие инструкции не будут выполняться, следовательно, else и дополнительный уровень вложенности - избыточность.

Ну и я не перевариваю объект head, у которого есть поле prev. Либо это хвост, у которого есть предыдущий элемент, либо это голова, у которой есть следующий.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
17.07.2014, 21:16
Цитата Сообщение от GetHelp Посмотреть сообщение
как вы еще собираетесь добавлять элемент в стек как не через параметр функции?
Через параметр, только передаваемый по константной ссылке.

Цитата Сообщение от GetHelp Посмотреть сообщение
а какие с этим проблемы? по мне так все нормально...
Что изменится, если else убрать?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.07.2014, 21:18
Цитата Сообщение от GetHelp Посмотреть сообщение
эмм а с этим то какие проблемы? как вы еще собираетесь добавлять элемент в стек как не через параметр функции?
через параметр, но по ссылке на константу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private:
    struct NODE
    {
        NODE(const T& data, NODE* prev)
        : data(data), prev(prev)
        {}
 
        T data;
        NODE *prev;
    } *head;
//...
template <typename T>
void Stack<T>::Push(const T& value)
{
    head  = new NODE(value, head);
}
Добавлено через 1 минуту
Цитата Сообщение от GetHelp Посмотреть сообщение
а какие с этим проблемы? по мне так все нормально...
а по мне те кто так пишут(я про else) просто боты
1
17.07.2014, 21:35

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
а по мне те кто так пишут(я про else) просто боты
Туда же, видел как-то:
C++
1
2
3
4
5
6
switch (...) {
// ...
default:
  return foo;
  break;
}

0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
17.07.2014, 22:24  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Передать по константной ссылке. Сейчас при добавлении объекта в стек происходит два копиросания. Первое - при передаче параметра, второе - парой строк ниже, при присваивании.
че за ссылка? не понимаю к чему усложнять... вы еще скажите что вообще передавать параметры в функциях это плохо и надо писать функции без параметров
Цитата Сообщение от 0x10 Посмотреть сообщение
Проблема стилистическая, противоречит логичности кода. После return последующие инструкции не будут выполняться, следовательно, else и дополнительный уровень вложенности - избыточность.
бред какой то вы пишите, все нормально будет выполняться... потому что просто напросто в случае когда !head код просто не пойдет по ветке с return....

Добавлено через 2 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
Ну и я не перевариваю объект head, у которого есть поле prev. Либо это хвост, у которого есть предыдущий элемент, либо это голова, у которой есть следующий.
брал за образец такой список http://learnc.info/adt/linked_list.html, там было это объявлено как next, но по сути это является не следующим, а именно предыдущим значением... меня лично это сбивало с толку
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.07.2014, 22:26
Цитата Сообщение от GetHelp Посмотреть сообщение
че за ссылка? не понимаю к чему усложнять..
или учи матчасть или иди
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
17.07.2014, 22:26
Цитата Сообщение от GetHelp Посмотреть сообщение
че за ссылка? не понимаю к чему усложнять...
Это не усложнение, а нужна оптимизация. В противном случае, при большом кол-ве данных твоя программа будет работать медленнее, чем программа с передачей параметров через ссылки.
Цитата Сообщение от GetHelp Посмотреть сообщение
вы еще скажите что вообще передавать параметры в функциях это плохо и надо писать функции без параметров
Без причины передавать, например, структуру с набором данных не по ссылке - да, плохо.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
17.07.2014, 22:27  [ТС]
Jupiter, вообще первый раз вижу такой странный код

1. функция внутри структуры? да вы видно шутите... разве так можно?
2. что за странный синтаксис у этой функции? что за двоеточие? и почему присвоение вне фигурных скобок?
3. head = new NODE(value, head); вообще не понял как это?
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
17.07.2014, 23:03
Толсто. Больше похоже на грубость.
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
17.07.2014, 23:45
Цитата Сообщение от GetHelp Посмотреть сообщение
функция внутри структуры? да вы видно шутите... разве так можно?
Можно. В С++ struct - это класс.
Цитата Сообщение от GetHelp Посмотреть сообщение
что за странный синтаксис у этой функции? что за двоеточие? и почему присвоение вне фигурных скобок?
Список инициализации. Любая книга по С++ в разделе "классы и ООП" даст ответ.
Цитата Сообщение от GetHelp Посмотреть сообщение
head = new NODE(value, head); вообще не понял как это?
Конструктор. Инициализация объекта в выделенной динамической памяти. Опять же, в любой книге это есть.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.07.2014, 04:49
Цитата Сообщение от GetHelp Посмотреть сообщение
бред какой то вы пишите, все нормально будет выполняться...
В конкретно этом случае я говорю о стиле кода, а не о последовательности выполнения операторов. Код избыточный и неестественный для чтения человеком.
0
18.07.2014, 08:20

Не по теме:

Понимаю, конечно, что самоуверенность прет изо всех щелей, но обычно, если код непонятен, то лучше попросить у автора объяснение, вдруг это вы не в курсе каких то особенностей языка

0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.07.2014, 16:45  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Можно. В С++ struct - это класс.
че реально? первый раз слышу...
Цитата Сообщение от DrOffset Посмотреть сообщение
Список инициализации. Любая книга по С++ в разделе "классы и ООП" даст ответ.
почитаю...
Цитата Сообщение от DrOffset Посмотреть сообщение
Конструктор. Инициализация объекта в выделенной динамической памяти. Опять же, в любой книге это есть.
ни разу не видел тож =(
Цитата Сообщение от 0x10 Посмотреть сообщение
В конкретно этом случае я говорю о стиле кода, а не о последовательности выполнения операторов. Код избыточный и неестественный для чтения человеком.
не знаю, а мне норм...

Добавлено через 1 минуту
еще не понятно такое объявление
Цитата Сообщение от Jupiter Посмотреть сообщение
void Stack<T>::Push(const T& value)
что значит T& value??? * - значит указатель, & - применяется для взятия адреса, как можно & юзать в параметре объявления функции?
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
18.07.2014, 16:49
GetHelp, предлагаю оставить форумитов в покое, а вместо этого взять книгу по с++ и немного самостоятельно позаниматься. Тем более впереди целые выходные.
2
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.07.2014, 16:52  [ТС]
ну и наконец я подумал и мне пофиг как на ваш взгляд красиво, а как нет, я оставлю для себя пуш с возвращаемым значением Т, разве что оставлю Т без указателя и с ошибкой при вызове с пустым стеком... всю остальную фигню ну нафиг, зачем лишние телодвижения? которые как я уже сказал почти никогда не могут пригодится... тема про то что плохо передавать в параметрах переменные звучит как полный бред, я буду делать класс так чтобы его потом было удобно использовать, а не так чтобы было все идеально правильно на ваш взгляд... как видите из скринов я попробовал класс аж на 5к значений, все работало за секунду... так что я не знаю сколько надо брать значений чтоб было реально заметное замедление работы из за каких то там хрен знает где утечек...

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
GetHelp, предлагаю оставить форумитов в покое, а вместо этого взять книгу по с++ и немного самостоятельно позаниматься. Тем более впереди целые выходные.
да у меня так и вовсе целые каникулы ок в принципе класс работает, тему можно закрыть

Добавлено через 2 минуты
Цитата Сообщение от GetHelp Посмотреть сообщение
что значит T& value??? * - значит указатель, & - применяется для взятия адреса, как можно & юзать в параметре объявления функции?
мне только вот про это интересно узнать, может я чего то не знаю еще...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.07.2014, 17:01
GetHelp, Не знаете. Практически всего, что касается С++. Амперсанд (&) используется не только для взятия адреса, но так же для указания, что значение передано по ссылке (про ссылки читать в учебнике).
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
18.07.2014, 17:03  [ТС]
ForEveR, бррр нет уж увольте, вообще си++ не для меня, мне нравится чистый си...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2014, 17:03

Оцените реализацию вертикального списка
Сделал вертикальный список с навигацией по стрелкам клавиатуры. https://jsfiddle.net/Ucorp/cuhkmxe0/9/ Буду рад услышать ваше...

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

Программа для шифрования файлов в один контейнер. Оцените реализацию
Приветствую. Написал свою первую программу. Суть такая: Выбираются файлы, добавляются в контейнер(zip) и потом этот контейнер шифруется...

пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки.
В файле input.txt находится неизвестное количество вещественных чисел в интервале . Выцапарать их оттуда, отсортировать по убыванию модуля...

Ошыбка на шаблонах
Простая проблемка, но никак не могу понять почему оно не работет. Выдает ошибку: Notice: Undefined variable: products in...


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

Или воспользуйтесь поиском по форуму:
100
Закрытая тема Создать тему
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru