Форум » C/C++ для начинающих (C/C++ for beginners) » Как вывести элементы контейнера или массива в поток или фразу "is empty" для пустого контейнера » Ответить

Как вывести элементы контейнера или массива в поток или фразу "is empty" для пустого контейнера

Сыроежка: Часто в различных консольных приложениях требуется вывести элементы контейнера или массива на консоль. А если соответствующий контейнер пустой, то вывести, например, фразу "is empty". Написать такую обобщенную функцию в C++ 17 стало довольно просто благодаря появлению новой обобщенной функции std::empty, которую можно вызывать также и для массивов. Ниже приведен пример использования новой обобщенной функции std::empty в функции вывода элементов произвольного контейнера на консоль. [pre2] #include <iostream> #include <iterator> #include <array> #include <vector> template <typename Container> std::ostream & output( const Container &container, std::ostream &os = std::cout ) { if ( not std::empty( container ) ) { for ( const auto &item : container ) { os << item << ' '; } } else { os << "is empty"; } return os; } int main() { int a[] = { 1, 2, 3, 4, 5 }; std::vector<int> v; std::array<int, 0> arr1; std::array<int, 5> arr2 = { 1, 2, 3, 4, 5 }; std::cout << "int a[]: "; output( a ) << '\n'; std::cout << "std::vector<int>: "; output( v ) << '\n'; std::cout << "std::array<int, 0>: "; output( arr1 ) << '\n'; std::cout << "std::array<int, 5>: "; output( arr2 ) << '\n'; } [/pre2] Вывод программы на консоль: [pre2] int a[]: 1 2 3 4 5 std::vector<int>: is empty std::array<int, 0>: is empty std::array<int, 5>: 1 2 3 4 5 [/pre2] Можно выводимую фразу из тела функции перенести в список параметров функции. Например, [pre2] template <typename Container> std::ostream & output( const Container &container, const std::string_view &s = "is empty", std::ostream &os = std::cout ) { if ( not std::empty( container ) ) { for ( const auto &item : container ) { os << item << ' '; } } else { os << s; } return os; } [/pre2]

Ответов - 0



полная версия страницы