|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.05.2013, 17:23 | #1 |
Пользователь
Регистрация: 21.05.2013
Сообщений: 13
|
реализация стека через массив
Добрый день форумчане.
Изучаю C++, и в качестве примера объявления класса решил попробовать сам запилить свой класс стека, просто так для ознакомления. my_stack.hpp Код:
Код:
У меня возникает вопрос "стоит ли функции size() и empty() сделать inline, если да, то какие от этого плюсы и выигрыш, если нет, то какие функции стоит помечать inline". Стек я реализовывал на основе массива, так проще, насколько эстетична такая реализация ? ну и соответственно, на ваш опытный взгляд всё ли правильно сделано ? нет ли утечек памяти ? |
21.05.2013, 17:39 | #2 | |||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Я бы сказал, что это скорее оптимизация и, как любая оптимизация, должна проводиться только в том случае, если её положительный эффект признан значимым (то есть, в данном случае не стоит). Цитата:
Цитата:
2) Методы top(), size(), empty() следует пометить как константные. 3) Для размеров (и индексов) в C++ принято использовать тип size_t. 4) (а вот это серьёзно) memcpy при копировании выходит за пределы массива-источника. Исправить. 5) (ещё серьёзнее) Не определён и не запрещён конструктор копии, при том, что класс управляет ресурсом (т.е. копирование с помощью memcpy некорректно). Исправить немедленно. 6) Память, занимаемая стеком, не уменьшается. Возможно, стоит добавить проверку в pop для случая, когда last << max_elem. |
|||
21.05.2013, 21:17 | #3 | ||||||||
Пользователь
Регистрация: 21.05.2013
Сообщений: 13
|
Спасибо за подробный ответ.
у меня теперь получился вот такой код. my_stack.hpp Код:
Код:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
почему у автора в коде Цитата:
Цитата:
Цитата:
|
||||||||
21.05.2013, 22:11 | #4 | ||||||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
||||||
21.05.2013, 22:40 | #5 |
Пользователь
Регистрация: 21.05.2013
Сообщений: 13
|
я, кстати, так и подумал, что там пропущено operator, но всё же решил поинтересоваться,
когда писал стек, я старался реализовать функционал std::stack а у него нет resize(). в конкретной задаче всё сведётся к тому, что нужно будет чаще делать, и если добавлять\убирать из стека, то эффективней будет добавить функцию reserve() для выделения памяти, но так как я писал стек для себя )) мною был выбран вот такой функционал |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
реализация стека через односвязный список | snusnu | Общие вопросы C/C++ | 7 | 06.04.2014 23:59 |
Реализация стека через массив | Quadrelle | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 23.04.2013 07:55 |
Сортировка стека через массив | D00M | C++ Builder | 6 | 22.05.2012 20:54 |
Реализация очереди через массив (Delphi) | wertret | Помощь студентам | 2 | 24.04.2012 02:25 |
C++, реализация стека | OffyGhost | Помощь студентам | 2 | 28.03.2010 07:02 |