Рассмотрим:
#include <string>
#include <string_view>
using namespace std;
string sv2s_1(string_view sv)
{
return string(sv.data(), sv.size());
}
string sv2s_2(string_view sv)
{
return string(sv.begin(), sv.end());
}
В sv2s_1
, string
необходимо выделить внутренний буфер не более одного раза.
В sv2s_2
, string
не знает насколько велик должен быть внутренний буфер, поэтому он должен * p sh возвращать символы один за другим и может перераспределять и копировать внутренний буфер много раз.
При условии, что first
и last
являются итераторы произвольного доступа , string(first, last)
могут использовать last - first
для быстрого получения размера своего внутреннего буфера, поэтому производительность равна string(ptr, size)
.
Вопрос: Если first
и last
являются итераторами произвольного доступа,
Гарантирует ли стандарт C ++ string(first, last)
эквивалентно string(ptr, size)
с точки зрения производительности?