Самое простое решение - распечатать разделитель (i%10 == 0) ? "\n" : ", "
. Вы правильно поняли, что брать остаток на каждой итерации цикла неэффективно, и хотели написать такой, который бы печатал десять элементов, за которыми следовала бы новая строка.
Хитрость заключается в том, чтобы написать внутренний цикл с шагом в секунду. counter, j
, сделайте все выходные данные во внутреннем цикле, а затем обновите i
в нижней части внешнего цикла. Упрощенный пример:
#include <array>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using std::cout;
int main()
{
constexpr size_t ARRAY_LEN = 100;
std::array<int, ARRAY_LEN> test;
{
// Quick and dirty initialization of the random seed to the lowest 30
// or so bits of the system clock, which probably does not really have
// nanosecond precision. It’ll do for this purpose.
timespec current_time;
timespec_get( ¤t_time, TIME_UTC );
srand(current_time.tv_nsec);
}
for (int i = 0; i < test.size(); i++){
//Set array to rand
test[i] = rand() % 44 + 55;
}
for ( int i = 0, j = 0;
i < test.size();
i += j ) {
for ( j = 0; j < 10 && i + j < test.size(); ++j ) {
cout << test[i + j] << ' ';
}
cout << '\n';
}
return EXIT_SUCCESS;
}
Обратите внимание, что версия, которую вы написали, не инициализирует случайное начальное число стандартной библиотеки, поэтому вы получаете те же (плохо распределенные) случайные числа. Вы могли бы написать версию, которая использует гораздо лучшие генераторы случайных чисел STL и, возможно, <chrono>
вместо версий на C, но это немного выходит за рамки вашего вопроса.