On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 01.11.18 17:30. Заголовок: Как вывести элементы контейнера или массива в поток или фразу "is empty" для пустого контейнера


Часто в различных консольных приложениях требуется вывести элементы контейнера или массива на консоль. А если соответствующий контейнер пустой, то вывести, например, фразу "is empty".

Написать такую обобщенную функцию в C++ 17 стало довольно просто благодаря появлению новой обобщенной функции std::empty, которую можно вызывать также и для массивов.

Ниже приведен пример использования новой обобщенной функции std::empty в функции вывода элементов произвольного контейнера на консоль.

 
#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';
}

Вывод программы на консоль:
 
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

Можно выводимую фразу из тела функции перенести в список параметров функции. Например,
 
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;
}


Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 3
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет