Есть вектор std::vector<uint8_t> From;
Он содержит 10^9 элементов
И есть пустой вектор std::vector<uint16_t> To;
В который нужно перенести значения так, чтобы значения элементов остались прежними.
Как грамотно это сделать?
To.assign(From.begin(), From.end());
Да, это просто копирование. Хороший компилятор вычислит размер вектора From
, выделит память и скопирует данные.
Сколько понадобится памяти? Давайте обозначим объём вектора To
за единицу. Тогда объём вектора From
будет в два раза больше - две единицы. Так как мы копируем, то на время копирования нам понадобятся три единицы памяти.
Можно ли преобразовать To
во From
в меньшей памяти? Нет, так как мы хотим чтобы From
был вектором.
Вектор умеет распределять память только одним способом - запрашивая непрерывный блок памяти из кучи. Этот блок в момент запроса не может содержать данные - технологии типа realloc
не используются вектором (почему - отдельный интересный вопрос). Так как данных в этом блоке нет, значит они где-то ещё и занимают одну единицу памяти. То есть в момент распределения памяти для вектора нам нужны три единицы памяти: одна для данных, две для нового вектора.
И общий рецепт - если памяти мало, не используйте вектора. Непрерывный блок памяти сравнимый с размерами памяти - зло.
Прошу, помогите найти код в ошибке и решить проблему, а то моя тупая головушка не может понять конкретного местаПрошу, не судите строго, я новичок...
У меня не много опыта с С++, но вот, что мне нужно сделатьУ меня есть метод который должен скастить unsigned char const * к void*
Помогите выбрать реализацию метода из двух вариантов - calc1() и calc2():