Разница между конкатами строк s = s + & ldquo; 0 & rdquo; и s + = & ldquo; 0 & rdquo; в с ++

Всякий раз, когда мне нужно быстро извлечь что-то из HTML-документа, я использую Tidy, чтобы преобразовать его в XML, а затем использовать XPath или XSLT, чтобы получить то, что мне нужно. В вашем случае что-то вроде этого:

//p/a[@href='foo']
-3
задан Matthieu Brucher 17 January 2019 в 16:05
поделиться

1 ответ

Первый создает промежуточную строку (которая будет назначена на s после операции +), а вторая - нет (зависит от емкости строки).

Сложность в худшем случае одинакова в обоих случаях, в лучшем случае это просто копирование новой строки для второго случая с полной копией обеих строк для первого случая (+ выделение памяти и освобождение). [115 ]

Тот факт, что ваш get TLE (Time Limit Exceeded), вероятно, связан с этим наихудшим случаем, который всегда копирует огромные строки, а не просто добавляет что-то к существующей (без перераспределения). Как и в случае с вектором, в string должна быть некоторая эвристика, чтобы заранее получить адекватную пропускную способность.

Как сказал @Slava, этот пример должен быть написан по-другому, я полагаю, что реальный код отличается.

0
ответ дан Matthieu Brucher 17 January 2019 в 16:05
поделиться
Другие вопросы по тегам:

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