Почему реализация STL таким образом нечитабельна? Как C++, возможно, был улучшен здесь?

Я не уверен в коэффициенте полезного действия, но я использовал что-то подобное следующему, если Вы не настроены против использования ArrayList:

private ArrayList ShuffleArrayList(ArrayList source)
{
    ArrayList sortedList = new ArrayList();
    Random generator = new Random();

    while (source.Count > 0)
    {
        int position = generator.Next(source.Count);
        sortedList.Add(source[position]);
        source.RemoveAt(position);
    }

    return sortedList;
}

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

32
задан Steve Jessop 15 November 2010 в 00:13
поделиться

2 ответа

Реализации используют имена, начинающиеся с символа подчеркивания, за которым следует прописная буква или два символа подчеркивания, чтобы избежать конфликтов с пользовательскими макросами. Такие имена зарезервированы в C ++. Например, можно определить макрос с именем Type , а затем #include . Если реализации вектора использовали Тип в качестве имени параметра шаблона, он сломался бы. Однако нельзя определять макросы с именем _Type (или __ type , type __ и т. Д.). Следовательно, вектор может безопасно использовать такие имена.

37
ответ дан 27 November 2019 в 21:00
поделиться

Многие реализации STL также включают проверку отладочных сборок, например, проверку того, что два итератора принадлежат одному и тому же контейнеру при их сравнении, и наблюдение за итераторами, выходящими за границы. Это включает довольно сложный код для отслеживания контейнера и достоверности каждого созданного итератора, но неоценим для поиска ошибок. Этот код также полностью переплетен со стандартным кодом выпуска с помощью #ifdefs - даже в алгоритмах STL. Так что никогда не будет так ясно, как их самая основная операция. Такие сайты, как , этот , демонстрируют базовую функциональность алгоритмов STL, заявляя, что их функциональность «эквивалентна» коду, который они показывают. Однако вы не увидите этого в своих заголовочных файлах.

6
ответ дан 27 November 2019 в 21:00
поделиться
Другие вопросы по тегам:

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