Сравните два последовательных элемента в станд.:: список

Я рекомендую flex-box.

Вы можете назначить «display: flex» элементу, внутри которого находятся все ваши дочерние элементы, т. Е. Все элементы, которые вы пытаетесь выровнять в соответствии с вашими требованиями.

Оттуда, flex-box предоставляет множество других функций, которые вы можете изучить здесь: https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Flex-box не только прост в реализации, но и отзывчив. Это может быть не слишком важно в вашем конкретном случае, но нужно учитывать некоторые дополнительные преимущества при разработке элементов.

    • Your image
      Your Name/Title
      Your contact
  • .flex-container { display: flex; justify-content: space-between; }

    https://jsfiddle.net/snehansh/fm3etpsu/5/

    7
    задан 4 November 2008 в 12:35
    поделиться

    4 ответа

    Список является Обратимым Контейнером, таким образом, его итераторы являются Двунаправленными Итераторами, который является моделью Вперед Итератора, который я вполне уверен, означает, что можно сделать это (или что-то эквивалентное, если у Вас аллергия на то, чтобы убегать из середины цикла и т.д.):

    if (!l.empty()) {
        for (list<T>::const_iterator i = l.begin();;) {
            const T &a = *i;
            ++i;
            if (i == l.end()) break;
            do_comparison(a, *i);
        }
    }
    

    Вы не могли сделать этого с Входным Итератором, потому что с теми значения только "существуют", пока у Вас есть итератор в них. Но Вы можете с Вперед Итератор.

    1
    ответ дан 6 December 2019 в 05:56
    поделиться

    Повышению назвали утилиту next (и его инверсия, prior) для просто той цели.

    *itr == *next(itr)
    

    Править: Но, если мы отступаем для рассмотрения леса, реальный вопрос, почему пользовательская запись Ваш adjacent_find функция? (Я рекомендую ответу Nicola Bonelli быть принятым.) Это - часть STL и не требует Повышения использования, если Ваш код не использует Повышение (благодаря комментаторам для указания на это).

    10
    ответ дан 6 December 2019 в 05:56
    поделиться

    Самый простой путь состоял бы в том, чтобы содержать два итератора (так как необходимо будет остановиться в предпоследнем так или иначе).

    std::list<int>::const_iterator second = list.begin(),
                                   end = list.end();
    
    if ( second != end ) // Treat empty list
        for(std::list<int>::const_iterator first = second++; // Post-increment 
            second != end; 
            ++first, ++second)
        {
            //...
        }
    

    Отметьте это first инициализируется с постприращением second таким образом, когда цикл запускается first list.begin() и второй list.begin()+1.

    Chris Jester-Young указывает, что повышение имеет next и prior функции, хотя я не знаком с этими функциями (для моих грехов) реализация их, тривиальны (особенно рассматривающий это list имеет двунаправленные итераторы).

    template <class Iterator>
    Iterator next(Iterator i) // Call by value, original is not changed
    { 
        return ++i;
    }
    // Implementing prior is left as an exercise to the reader ;o) 
    

    Мое чувство является тем использованием next не делает комплекта эта проблема, а также поддерживающий оба итератора, так как необходимо не забыть удостоверяться next(i) не равняется end() при каждом использовании.


    Редактирования:

    • Исправленная ошибка, если список пуст благодаря комментарию Luc Touraille.
    • Добавьте ссылку на next и почему я думаю, что это не соответствует этому примеру использования.
    8
    ответ дан 6 December 2019 в 05:56
    поделиться

    STL обеспечивает adjacent_find () алгоритм, который может использоваться для нахождения двух последовательных равных элементов. Существует также версия с пользовательским предикатом.

    Это прототипы:

    template <class ForwardIterator>
       ForwardIterator adjacent_find ( ForwardIterator first, ForwardIterator last );
    
    template <class ForwardIterator, class BinaryPredicate>
       ForwardIterator adjacent_find ( ForwardIterator first, ForwardIterator last,
                                       BinaryPredicate pred );
    
    12
    ответ дан 6 December 2019 в 05:56
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: