Легковесный массив времени выполнения C ++ 11? - PullRequest
0 голосов
/ 04 мая 2018

Я работаю на небольших встроенных платформах. 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 раза больше кода для вектора. Это не имеет большого значения для настольных приложений и аналогичных приложений, но для встраивания и разработки игр, как правило, вектор избегают по таким причинам.

...