STL - критическая часть мира С++, большинство реализаций проистекают из первоначальных усилий Степанова и Муссера.
Мой вопрос задан критичностью кода, и он является одним из основных источников для людей, чтобы просмотреть примеры хорошо написанного С++ для благоговения и обучения: почему различные реализации STL настолько отвратительны, чтобы смотреть на - свернутые и в целом хорошие примеры того, как не писать код С++ с эстетической точки зрения.
Приведенные ниже примеры кода не будут проходить проверку кода в местах, где я работал, по причинам, отличающимся от имен переменных, макетов, макросов и использования операторов, которые требуют более простого взгляда, чтобы выяснить, что на самом деле происходит.
template<class _BidIt> inline
bool _Next_permutation(_BidIt _First, _BidIt _Last)
{ // permute and test for pure ascending, using operator<
_BidIt _Next = _Last;
if (_First == _Last || _First == --_Next)
return (false);
for (; ; )
{ // find rightmost element smaller than successor
_BidIt _Next1 = _Next;
if (_DEBUG_LT(*--_Next, *_Next1))
{ // swap with rightmost element that smaller, flip suffix
_BidIt _Mid = _Last;
for (; !_DEBUG_LT(*_Next, *--_Mid); )
;
_STD iter_swap(_Next, _Mid);
_STD reverse(_Next1, _Last);
return (true);
}
if (_Next == _First)
{ // pure descending, flip all
_STD reverse(_First, _Last);
return (false);
}
}
}
_Ty operator()()
{ // return next value
static _Ty _Zero = 0; // to quiet diagnostics
_Ty _Divisor = (_Ty)_Mx;
_Prev = _Mx ? ((_Ity)_Ax * _Prev + (_Ty)_Cx) % _Divisor
: ((_Ity)_Ax * _Prev + (_Ty)_Cx);
if (_Prev < _Zero)
_Prev += (_Ty)_Mx;
return (_Prev);
}
Обратите внимание: я не критикую интерфейс, так как он очень хорошо разработан и применим. Меня беспокоит читаемость деталей реализации.
Ранее были заданы аналогичные вопросы:
Есть ли читаемая реализация STL
Почему реализация STL настолько нечитаема? Как С++ можно было улучшить здесь?
Примечание. Приведенный выше код берется из алгоритма MSVC 2010 и заголовков очередей.