Форум » C/C++ » Вывод на консоль - широкий выбор средств в С++. » Ответить

Вывод на консоль - широкий выбор средств в С++.

Сыроежка: С принятием стандарта С++ 2011 в языке С++ появилось такое многообразие новых средств, что при выполнении простой задачи можно надолго задуматься, не зная, какую конструкцию предпочесть, и какая из существующих возможностей будет более выразительна. Для примера рассмотрим вывод на консоль некоторой заданной последовательности, например, массива целых чисел. Классический способ - это использовать цикл for и обращение к элементам массива по индексу. Такой подход всем знаком, и с него обычно начинают изучение С++. [pre2]#include <iostream> int main() { nt a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for ( size_t i = 0; i < sizeof( a ) / sizeof(( *a ); i++ ) { std::cout << a[ i ] << " "; } std::cout << std::endl; return ( 0 ); }[/pre2] Сколько раз за свою практику нам приходилось писать такой код! Второй способ более продвинутый и основан на использовании стандартных алгоритмов [pre2]#include <iostream> #include <iterator> #include <algorithm> int main() { nt a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::copy( std::begin( a ), std::end( a ), std::ostream_iterator<int>( std::cout, " " ) ); std::cout << std::endl; return ( 0 ); }[/pre2] Это то, что было в располряжении программистов до принятия нового стандарта. Казалось бы, что этого вполне достаточно. Но не тут-то было! Пояаились лямбда-выражения. Как же их не попробовать использовать?! Итак, третий способ вывода на консоль массива с применением уже лямбда-выражения. [pre2]#include <iostream> #include <iterator> #include <algorithm> int main() { nt a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::for_each( v.begin(), v.end(), []( int x ) { std::cout << x << " "; } ); std::cout << std::endl; return ( 0 ); }[/pre2] Все? Нет, не все! Разработчики стандарта решили снова нас вернуть к проверенному и испытанному средству - циклу for. Появилась новая разновидность этого цикла - цикл for, основанный на диапазоне. Как говорится, новое - это хорошо забытое старое! Вот как быдет выглядеть этот вариант. Заранее предупреждаю, что MS VC++ 2010 не поддерживает это средство. Скорее всего оно появится в MS VC++ 2011, который Майкрософт уже предлагает своим клиентам. Тем не менее, чтобы запустить представленный пример, можно воспользоваться он-лайновым компилятором [pre2]#include <iostream> #include <iterator> int main() { nt a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for ( const auto &x : v ) std::cout << x << " "; std::cout << std::endl; return ( 0 ); }[/pre2] Какой из этих способов вывода на консоль предпочтительней? Это уже решать каждому самостоятельно. Но скорей всего по моему мнению наибольшую популярность завоюет последний из приведенных способов. Особенно, если появится больше компиляторов, поддерживающих такую синтаксическую конструкцию, как цикл for, основанный на диапазоне. P.S. Вполне возможно, что есть еще и другие варианты выполнения данной задачи. Если вы их знаете, то напишите о них.

Ответов - 0



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