Я работаю на небольших встроенных платформах. std::array<>
замечательно, когда мы знаем размер массива во время компиляции. Мы будем использовать std::vector<>
в некоторых случаях для массивов времени выполнения, когда нам нужно добавлять и удалять элементы.
Эта промежуточная область, где мы узнаем только (постоянный) размер массива во время выполнения, более хитрая. В настоящее время мы используем std::unique_ptr<[]>
в большинстве этих случаев. Он измеряется во время выполнения и не имеет служебных данных вектора. Но есть и недостатки: синтаксис не велик, его сложно использовать в алгоритмах std без std::begin
& std::end
и т. Д.
Мне очень хочется создать свой собственный RuntimeArray <>, который оборачивает std :: unique_ptr <[]> или что-то подобное. Есть ли другие варианты, которые я должен рассмотреть? Может быть, что-то в сторонней библиотеке стоит посмотреть?
Edit - множество вопросов о накладных расходах std::vector<>
. Я попытался собрать минимальный пример на https://godbolt.org/g/JT96eE. Вы можете поиграть с ним, чтобы увидеть разницу в сгенерированной сборке - на 30-50% больше для вектора. Я видел другие случаи, которые более драматичны, в 3-4 раза больше кода для вектора. Это не имеет большого значения для настольных приложений и аналогичных приложений, но для встраивания и разработки игр, как правило, вектор избегают по таким причинам.