К сожалению, нет «предыдущего» селектора, но вы можете , возможно, получить тот же эффект, используя позиционирование (например, float right). Это зависит от того, что вы пытаетесь сделать.
В моем случае я хотел получить первую 5-звездочную рейтинговую систему CSS. Мне нужно было бы покрасить (или поменять значок) предыдущих звезд. Если плавать каждый элемент вправо, я по сути получаю тот же эффект (html для звезд, таким образом, должен быть записан «назад»).
Я использую FontAwesome в этом примере и заменяю между юникодами fa -star-o и fa-star http://fortawesome.github.io/Font-Awesome/
CSS:
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* set all stars to 'empty star' */
.stars-container {
display: inline-block;
}
/* set all stars to 'empty star' */
.stars-container .star {
float: right;
display: inline-block;
padding: 2px;
color: orange;
cursor: pointer;
}
.stars-container .star:before {
content: "\f006"; /* fontAwesome empty star code */
}
/* set hovered star to 'filled star' */
.star:hover:before{
content: "\f005"; /* fontAwesome filled star code */
}
/* set all stars after hovered to'filled star'
** it will appear that it selects all after due to positioning */
.star:hover ~ .star:before {
content: "\f005"; /* fontAwesome filled star code */
}
HTML: (40)
Вот некоторые вещи, которые я люблю, рассматривают при работе над этим видом кода.
Существует очень хорошее видео Herb Sutter, который упоминает, что эта тема здесь
Для данных связала операции
, использование выстраивает & векторы по спискам, & карт; наборы
процесс строками по столбцам
Позвольте ЦП выбирать данные с упреждением эффективно. Например, можно уменьшить неудачные обращения в кэш числа, обрабатывающие многомерные массивы строками, а не на колонны, развернуть циклы и т.д.
, Этот вид оптимизации зависит от аппаратной архитектуры, таким образом, Вы лучше используете некоторого определенного для платформы профилировщика как Intel VTune для обнаружения возможных проблем с кэшем.
Встраивание выполнений функций может рискнуть вредить кэшу инструкции. И если память не будет связанной выборкой, то это вряд ли сделает много (если таковые имеются) различием.
Как всегда, любой оптимизации нужно сообщить путем профилирования, а не догадки. Не говоря уже о том, что необходимо будет понять то, что профилировщик говорит Вам, который подразумевает знакомство с ассемблером и представляющими параметрами plaftorm, Вы оптимизируете для.
Немного старый теперь, но Черный список Программирования "Диаграммы Mike Abrash" все еще имеет много хороших общих рекомендаций.
Также, если Ваше выполнение C++ и многопоточности необходимо рассмотреть ложное совместное использование, местность и жаркость данных по кэшу каждого процессора. Это может иметь большое значение. Также особенно в многопоточности вычислительные вещи способом LIFO более эффективно, чем вычисление способом FIFO, но его также допустимый в единственной архитектуре процессора.
Избегайте использования динамической памяти, когда это не будет необходимо. Используя новый, удалите, интеллектуальные указатели, и так далее, имеет тенденцию распространять Ваши данные программы через память. Это не хорошо. Если можно держать большинство данных вместе (путем объявления объектов на стеке, например), кэш будет, конечно, работать намного лучше.