Перейти к содержанию

Последнее обновление:2026-10-12

Быстрый вывод STL-контейнеров в C++

Я немного доработал код учителя Ву — нажмите здесь, чтобы перейти сразу к коду

Ввод:

map<int, int> mp{
            {1, 1},
            {2, 4},
            {3, 9}};
    cout << mp << endl;

Результат вывода:

{ 1 => 1, 2 => 4, 3 => 9 }

Как подключить

Скачайте 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. Вопросы ждём в комментариях~

Похожие темы

Комментарии