Последнее обновление:2026-10-12
Быстрый вывод STL-контейнеров в C++¶
Я немного доработал код учителя Ву — нажмите здесь, чтобы перейти сразу к коду
Ввод:
Результат вывода:
¶
Как подключить¶
Скачайте output_container.h в проект и подключите его — этого достаточно:
#include "output_container.h"
int main() {
std::vector<int> vec{1, 2, 3, 4, 5};
std::set<std::string> names{"light", "city"};
std::cout << vec << std::endl; // { 1, 2, 3, 4, 5 }
std::cout << names << std::endl; // { city, light }
return 0;
}
Какие контейнеры поддерживаются¶
vector, list, set, map, multiset, multimap, семейство unordered, pair, а также любой пользовательский итерируемый тип (достаточно реализовать begin/end); вложенные контейнеры тоже печатаются напрямую.
Принцип в одном предложении¶
Суть — специализация operator<< для контейнеров: с помощью SFINAE (void_t детектирует begin()/end()) определяется, «итерируемый ли это объект»; если да — вывод поэлементно, если нет — используется исходный поток вывода. Интересующимся советую прочитать исходник: меньше двухсот строк, отличный материал для изучения идиомы детекции выражений.
Печать контейнеров при отладке — насущная потребность; эта маленькая утилита экономит бесчисленные рукописные циклы for. Вопросы ждём в комментариях~
Похожие темы¶
- Сборка проектов C++ с Bazel | C++那些事
- Совместная отладка Bazel и LLDB | C++那些事
- CMake: введение и практика | C++那些事
- Введение в управление пакетами Conan для C++ | C++那些事
- C++ Insights: взгляд на этап компиляции | C++那些事
- Интерактивные C++ Jupyter Notebook | C++那些事
- Преобразование C++ string в int | C++那些事
- Отладочный макрос dbg-macro для C++ | C++那些事
- Подробный разбор опций компиляции GCC | C++那些事
- Отладка программ на C++ с помощью GDB | C++那些事