Хотя я не обязательно призываю вас сделать это, похоже, что быстрее звонить .length()
быстрее, чем сохранять его в int
, что удивительно (по крайней мере, на моем компьютере, учитывая, что я используюигровой ноутбук MSI с i5 4-го поколения, но на самом деле это не должно влиять на то, какой путь быстрее).
Тестовый код для постоянного вызова:
#include <iostream>
using namespace std;
int main()
{
string g = "01234567890";
for(unsigned int rep = 0; rep < 25; rep++)
{
g += g;
}//for loop used to double the length 25 times.
int a = 0;
//int b = g.length();
for(unsigned int rep = 0; rep < g.length(); rep++)
{
a++;
}
return a;
}
В среднем это составляет 385 мссогласно Code :: Blocks
И вот код, который хранит длину в переменной:
#include <iostream>
using namespace std;
int main()
{
string g = "01234567890";
for(unsigned int rep = 0; rep < 25; rep++)
{
g += g;
}//for loop used to double the length 25 times.
int a = 0;
int b = g.length();
for(unsigned int rep = 0; rep < b; rep++)
{
a++;
}
return a;
}
И это в среднем составляет около 420 мс.
Я уже знаю этот вопросесть принятый ответ, но практически не было проверенных ответов, поэтому я решил добавить свои 2 цента. У меня был такой же вопрос, как и у вас, но я не нашел здесь никаких полезных ответов, поэтому я запустил свой собственныйэксперимент.