Я рекомендую 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;
}
Список является Обратимым Контейнером, таким образом, его итераторы являются Двунаправленными Итераторами, который является моделью Вперед Итератора, который я вполне уверен, означает, что можно сделать это (или что-то эквивалентное, если у Вас аллергия на то, чтобы убегать из середины цикла и т.д.):
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);
}
}
Вы не могли сделать этого с Входным Итератором, потому что с теми значения только "существуют", пока у Вас есть итератор в них. Но Вы можете с Вперед Итератор.
Повышению назвали утилиту next
(и его инверсия, prior
) для просто той цели.
*itr == *next(itr)
Править: Но, если мы отступаем для рассмотрения леса, реальный вопрос, почему пользовательская запись Ваш adjacent_find
функция? (Я рекомендую ответу Nicola Bonelli быть принятым.) Это - часть STL и не требует Повышения использования, если Ваш код не использует Повышение (благодаря комментаторам для указания на это).
Самый простой путь состоял бы в том, чтобы содержать два итератора (так как необходимо будет остановиться в предпоследнем так или иначе).
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()
при каждом использовании.
Редактирования:
next
и почему я думаю, что это не соответствует этому примеру использования.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 );