Информация об изменениях

Сообщение Re[3]: range based for - первый/последний? от 13.03.2019 17:38

Изменено 14.03.2019 8:18 rg45

Re[3]: range based for - первый/последний?
Здравствуйте, Marty, Вы писали:


M>Как минимум, этот код не будет корректно работать для пустого контейнера.


Все верно. Потому что этот код максимально упрощен. Если хочется универсальности, смотри первоначальный ("сложный") вариант:

https://ideone.com/OSuZuC

#include <iostream>
#include <boost/range/iterator_range.hpp>

template <typename SequenceT>
void print_sequence(const SequenceT& seq)
{
    if (!boost::empty(seq))
    {
        std::cout << "[" << *std::begin(seq);
        
        for (const auto& item : boost::make_iterator_range(seq, 1, 0))
        {
            std::cout << ", " << item;
        }
        std::cout << "]"<< std::endl;
    }
}

int main()
{
    const int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    print_sequence(array);
}
Re[3]: range based for - первый/последний?
Здравствуйте, Marty, Вы писали:


M>Как минимум, этот код не будет корректно работать для пустого контейнера.


Все верно. Потому что этот код максимально упрощен. Если хочется универсальности, смотри первоначальный ("сложный") вариант:

https://ideone.com/OSuZuC

#include <iostream>
#include <boost/range/iterator_range.hpp>

template <typename SequenceT>
void print_sequence(const SequenceT& seq)
{
    if (!std::empty(seq))
    {
        std::cout << "[" << std::front(seq);
        
        for (const auto& item : boost::make_iterator_range(seq, 1, 0))
        {
            std::cout << ", " << item;
        }
        std::cout << "]"<< std::endl;
    }
}

int main()
{
    const int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    print_sequence(array);
}