Есть ли лучший способ сделать это?
Да, есть несколько вещей, которые вы могли бы сделать здесь, чтобы ускорить процесс.
Как упоминалось ранее, резервирование пространства в std :: vector и последующее присвоение значений известным элементам происходит быстрее. Кроме того, предварительное увеличение (++ var вместо var ++) быстрее при использовании неоптимизированных компиляторов. Просто для того, чтобы ваш код был быстрым, независимо от того, кто его создает, вы можете захотеть сделать это с этого момента. Что касается памяти, вы можете найти ее тривиальной, но когда я использую известные размеры без знака и не слишком большие, я использую шрифт без знака для моих циклов for.
О модуле, однако. Вы можете не использовать его, если он вам не нужен. В зависимости от типа данных, содержащихся в векторе, ваши результаты должны переноситься, если они превышают максимальный объем хранилища этого типа.
Я не знаю, израсходовано ли оно, потребляя больше вычислительной мощности при переносе переменных, и если да, то я все еще не уверен, что это менее затратная операция, чем предварительное формирование по модулю. Возможно, вы захотите выполнить некоторые тесты скорости с известными размерами, прежде чем переходить на rand.
A.reserve(i * i);
for(unsigned short j = 0; j < 10; ++j) {
for(unsigned short k = 0; k < i; ++k)
A[k + (i*10)] = rand();
// Other stuff
}
Редактировать
Очень небольшое изменение, чтобы заметить: цикл идет только 10 раз, так что вы могли бы также использовать неподписанный символ вместо короткого. На Win32 как минимум это занимает половину памяти.
A.reserve(i * i);
for(unsigned char j = 0; j < 10; ++j) {
for(unsigned char k = 0; k < i; ++k)
A[k + (i*10)] = rand();
// Other stuff
}