DevGang
Авторизоваться

Я сделал версию console.log() на C++

Мне нравится JavaScript, console.log() поскольку он может печатать переменные любого типа: числа, строки, массивы и объекты, а также полезен при отладке.
В последнее время я занимаюсь соревновательным программированием, но эта функция помогает мне отлаживать и там.

Но в C++ нет такой функции.
C++ быстр и подходит для конкурентного программирования, но каждый раз, когда вы хотите напечатать вектор для отладки, вам приходится писать длинный код, например for(int i = 0; i < N; ++i) std::cout << a[i] << std::endl;. Соревновательное программирование — это гонка со временем, поэтому я хочу этого избежать.

Тогда почему бы не сделать свою версию на C++ console.log()?
Итак, я сделал один (с большим усилием)!

Git-repo

Печать переменных с помощью cpp-dump

Чтобы использовать cpp-dump, включите его dump.hpp в корневую папку репозитория и вызовите cpp_dump::dump().
Это так просто!
Примечание. Имя функции далеко от console.log(). 😅

Код:

// In main() or some function
std::vector<std::vector<int>> my_vector{{3, 5, 8, 9, 7}, {9, 3, 2, 3, 8}};
cpp_dump::dump(my_vector);

Выход:

Функции

Примеры вывода распечатываются с использованием версии макроса.

Представление строк в стиле JavaScript

Как и console.log(), cpp-dump печатает переменные в строковом представлении в стиле JavaScript.

Вывод итераций, таких как std::vector, std::array, массивы в стиле C:

Вывод std::map и std::unordered_map:

Вывод std::tuple и std::pair:

Однако на самом деле это похоже на Python, а не на JavaScript.

Вывод std::set и std::unordered_set:

Автоматический отступ

Если содержимое переменной велико, cpp-dump автоматически делает отступ так, чтобы вывод соответствовал максимальной ширине строки.

Вывод итераций, таких как std::vector, std::array, массивы в стиле C:

Вывод std::tuple, std::pair, std::set и std::unordered_set также имеет такой же отступ.

Вывод std::map и std::unordered_map:

Он также может печатать вложенные контейнеры.

Поскольку cpp-dump печатает переменную рекурсивно, он также может, например, печатать многомерные массивы и пары векторов.

Широкий спектр других поддерживаемых типов

cpp-dump поддерживает различные другие типы, такие как std::multimap, std::queue, std::complex и т. д. Подробности см. в README в репозитории.

Настраиваемые цвета вывода

Вы можете настроить цвета вывода cpp-dump.
Следующее изображение является примером. Подробности
смотрите в README в репозитории.

Для использования в соревновательном программировании

CPP_DUMP() длинный, поэтому давайте сократим его до dump() макроса.
Кроме того, давайте напишем следующее, чтобы удалить его dump() при отправке кода.

#include "./cpp-dump/dump.hpp"
#define dump(...) CPP_DUMP(__VA_ARGS__)
#else
#define dump(...)
#define CPP_DUMP_SET_OPTION(...)
#define CPP_DUMP_DEFINE_EXPORT_OBJECT(...)
#define CPP_DUMP_DEFINE_EXPORT_ENUM(...)
#endif

#include <bits/stdc++.h>

#define rep(i, n) for (int i = 0; i < (int)(n); ++i)

using namespace std;

int main() {
  CPP_DUMP_SET_OPTION(max_line_width, 80);

  int N;
  cin >> N;

  vector<int> X(N);
  rep(i, N) { cin >> X[i]; }
  dump(X);
}

Тогда при локальной компиляции исходного кода макрос dump() будет работать только локально при выполнении следующей команды!

g++ main.cpp -D DEFINED_ONLY_IN_LOCAL

Заключение

Надеюсь, эта библиотека поможет!

Источник:

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу