Блог пользователя Sanitator

Автор Sanitator, история, 6 лет назад, По-русски

Хотели когда-нибудь посмотреть в консоли на переменные, которые вы используете? Встречайте пару дебаг-функций!

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)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +39
  • Проголосовать: не нравится