Следующее очень медленно для длинных строк:
std::string s = "long string";
K klist = DBVec::CreateList(KG , s.length());
for (int i=0; i<s.length(); i++)
{
kG(klist)[i]=s.c_str()[i];
}
Он работает достаточно быстро (‹100 мс) для строк до 100 тыс., но замедляется до минимума (десятки минут, возможно, часы) для строк из нескольких миллионов символов. Я не вижу ничего, кроме kG
, что могло бы создать нелинейность. Я не вижу никаких причин для того, чтобы функция доступа kG
имела непостоянное время, но в этом цикле больше ничего нет. К сожалению, я не знаю, как работает kG
из-за отсутствия документации.
Вопрос: учитывая блок двоичных данных в виде std::string, каков эффективный способ построения списка байтов?