Поскольку мои обычно используемые компиляторы C ++ допускают массивы переменной длины (например, массивы в зависимости от размера времени выполнения), мне интересно, есть ли что-то вроде std::array
с переменным размером? Конечно, std::vector
имеет переменный размер, но он размещается в куче и перераспределяется при необходимости.
Мне нравится иметь массив, выделенный стеком, размер которого определяется во время выполнения. Есть ли какой-нибудь std
-шаблон, в котором это может быть? Может быть, использовать std::vector
с фиксированным максимальным размером?
std::array
размер массива является параметром шаблона, поэтому он не может быть переменной времени выполнения. Думаю,std::vector
- ваш лучший выбор. - person Daniel Kamil Kozar   schedule 31.12.2013std::vector
с настраиваемым распределителем. Поскольку вы ожидаете, что данные будут расположены в стеке, по-видимому, они всегда будут освобождаться в обратном порядке, в котором они размещены. С учетом этого ограничения, должно быть довольно легко написать чрезвычайно быстрый локальный распределитель потока. Обратной стороной является то, что вы сделаете отдельное выделение заранее для хранения данных, но это не так уж сильно отличается от того, что ОС делает для стека вашего потока - в современной ОС ваш блок является виртуальным только до тех пор, пока он не используется, как и стек. Но это не выиграет от горячего стека в кеше. - person Steve Jessop   schedule 31.12.2013alloca
не слишком хорошо работает с объектами с отслеживанием состояния, и это помечено C ++. - person Benjamin Bannier   schedule 31.12.2013