Наверное, каждый спортивный программист хотя бы раз выводил содержимое контейнера, массива или просто значение переменной во время дебага. В этот момент появляются такие вот уродливые конструкции(взято с потолка):
vector<int> a[2][2] = {{{2,3}, {4}}, {{6,2}, {4,5}}};
for(int i = 0; i < size(a); ++i, cout << endl){
for(int j = 0; j < min(4, int(size(a[i]))); ++j, cout << endl){
for(int k = 0; k < min(3, int(size(a[i][j]))); ++k){
cout << a[i][j][k] << ' ';
}
}
}
О, господи, да еще и гарантированная проверка, что счетчик не выходит за пределы массива! 2D, 3D, какая разница, если это нелья записать кратко?! Мне надоело бесконечно писать эти циклы, поэтому я сделал четырехстрочник, который может вывести значения практически чего угодно, хранящего встроенные типы. Вывод сделан в стиле питона. Конечно, у него есть некоторые ограничения, но, в целом, он мне нравится.
Вы можете найти его здесь. Он использует некоторые фичи c++17, поэтому выберите правильный компилятор
Надеюсь, он сохранит немного вашего бесценного времени.
P.S. Если вы хотите просмотреть исходную несжатую версию, она здесь. P.P.S. Если вы захотите адаптировать код к c++11/14, я не возражаю, если вы склонируете этот блог для (c++11/14 эдишн). Или вы можете предложить ваш код, и я добавлю его сюда, чтобы все версии были вместе.