Хотели когда-нибудь посмотреть в консоли на переменные, которые вы используете? Встречайте пару дебаг-функций!
dbg()
DeBuG
Допустим, у вас есть вложенные друг в друга контейнеры(vector, string, bitset, set, map
) или массивы, которые вы будете для простоты рассматривать как многомерный массив со специфическими измерениями. dbg()
может аккуратно вывести название и границы подмассива такого массива, а потом и значения из этого подмассива с автоматической проверкой границ.
Например:
int j[2][2][3] = {{{4,5,6},{10,11,12}}, {{1,2,3}, {7,8,9}}};
dbg(j);
dbg(j, 0,0, 0,1, 0,1);
вывод:
[[[4, 5, 6],
[10, 11, 12]],
[[1, 2, 3],
[7, 8, 9]]]
[[[4, 5],
[10, 11]]]
Вы передаете функции по [две закрытые границы] для каждого измерения, причем можно опустить несколько последних границ. Если они слишком большие, dbg()
уменьшает их. По умолчанию начальная и конечная граница для каждого измерения устанавливаются на начало и конец каждого измерения.
+Если вы передаете границы [l, r] в измерение, которое map
или set
, вывод начинается с l-ного по возрастанию ключей элемента и заканчивается r-ным или последним(если граница r слишком большая) элементом контейнера.
+dbg()
работает с c-массивами, чьи размеры измерений константны и известны на этапе компиляции.
/*-----------------------------------------------*/
dbgm()
DeBuG Multiple
Вы можете вывести названия нескольких переменных, а потом их значения:
string s = {"codeforces"};
int t = 5; char u = 'R';
pair<pair<double, unsigned int>, pair<int, string>> v = {{234.34534, 42}, {133, "IOI"}};
dbgm(s,t,u,v);
вывод:
[s,t,u,v]: "codeforces" | 5 | R | ((234.345340, 42), (133, "IOI")) |
/*-----------------------------------------------*/
Здесь мой код. Он в значительной мере вдохновлен этой посылкой by tourist.
Компактная версия получена из extended при помощи http://removelinebreaks.net/.
/*-----------------------------------------------*/
Надеюсь, этот код сохранит немного вашего бесценного времени на контестах.
Спасибо за этот пост и за это предложение HosseinYousefi
Полную версию dbg-библиотеки вы можете найти здесь. Код для вывода кортежей взят отсюда.
UPD1: добавлена ссылка на всю библиотеку с тестами
UPD2: добавлен вывод кортежей(tuple)