Как реализовать контроль целостности веб-приложений

ПРИМЕЧАНИЕ. Этот ответ получил некоторое внимание в последнее время. Я не выступаю за это как решение (это решение, которое я видел в прошлом, перед STL). Это интересный подход и должен применяться только к std::string или std::stringstream, если после профилирования вашего кода вы обнаружите, что это улучшает.

Обычно я использую либо std::string или std::stringstream . У меня никогда не было проблем с этим.

Я видел, как другие люди делают свой собственный оптимизированный построитель строк в далеком прошлом.

class StringBuilder {
private:
    std::string main;
    std::string scratch;

    const std::string::size_type ScratchSize = 1024;  // or some other arbitrary number

public:
    StringBuilder & append(const std::string & str) {
        scratch.append(str);
        if (scratch.size() > ScratchSize) {
            main.append(scratch);
            scratch.resize(0);
        }
        return *this;
    }

    const std::string & str() {
        if (scratch.size() > 0) {
            main.append(scratch);
            scratch.resize(0);
        }
        return main;
    }
};

Он использует две строки, одну для большей части строки, а другую как область скреста для конкатенации коротких строк. Добавляет оптимизацию, добавляя короткие операции добавления в одну маленькую строку, а затем добавляя ее к основной строке, тем самым уменьшая количество перераспределений, необходимых для основной строки, по мере ее увеличения.

Я не требую этого трюка с std::string или std::stringstream. Я думаю, что он использовался с третьей строковой библиотекой перед std :: string, это было так давно. Если вы сначала примете стратегию, как этот профиль, ваше приложение.

0
задан Alex T 18 January 2019 в 12:44
поделиться