Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

-1 это начало стека в С++ или измерение длины стека?

ФермаКактусов Высший разум (180558), закрыт 1 год назад
Лучший ответ
Андрей Высший разум (425151) 1 год назад
Речь про то, что в данном конкретном случае стек реализован как массив в памяти, но для задания положения вершины стека используется не индекс в массиве, а указатель на элемент массива.

Если значением указателя является элемент из средины массива, C/C++ позволяет безопасно использовать отрицательные индексы для этого указателя - главное, чтобы получаемый элемент был в пределах массива.

В терминах C/C++:
Добавление элемента в стек: *stack++ = value
Извлечение из стека c удалением: value = *--stack
Получение значения в вершине стека: value = stack[-1]
Получение третьего от вершины стека значения: value = stack[-3]
Остальные ответы
Def Просветленный (36740) 1 год назад
Текст на картинке относится к Lua API и его собственной реализации стека, к библиотеке С++ или С, а также их стандартным структурам отношения не имеет.

Плюсовый std::stack не имеет доступа по индексу, только возможность посмотреть верхний элемент.
ФермаКактусовВысший разум (180558) 1 год назад
я ж все названия луа затер. как вы догадались что луа?

я считал что если в луа можно обратится к элементу через -1 последний -2 предпоследний то и в С или С++ должно быть что то аналогичное так как оба языва вроде ООП или луа не совсем ООП?
DefПросветленный (36740) 1 год назад
Мне пришлось гуглить начальную строку, чтобы определить что это за нестандартная чухня, пока не нашёл книгу, из который был вырезан отрывок. Такое вырезание контекста совсем не облегчает ответ на поставленный вопрос, если выхотите его получить.

В языках Си и C++ в том случае, если делается некоторая общеупотребительная структура данных, то из неё по мере возможностей вырезается вся посторонняя функциональность, чтобы, в частности, не делалось попыток использовать стек как массив и т. п. То, как это реализовано в Луа и его сишного АПИ - то это личное дело Луа и и его программистов.
DefПросветленный (36740) 1 год назад
Если в плюсах программисту требуется какая-то кастомная реализация структуры данных, то он берет и реализует её самостоятельно, в частности, если ему нужен стек с рандомным доступом, то он просто берет и пользуется std::vector, у которого есть этот самый доступ по индексу, а также push_back и pop_back. Отрицательный индекс, правда, в нём будет означать не взятие верхнего элемента, а выход за границы распределённой памяти и неопрелённое поведение, так что если обязательно нужно трактовать отрицательные индексы относительно верхнего элемента, то тут уж придётся реализовывать operator[] соответствующим образом.
Похожие вопросы