私はプログラムを書いたが、パフォーマンスに問題がある。ボトルネックと悪いスタイルコード
void getlinesplit(const char *file, unsigned int &pos, tline &vline)
{
vline.clear();
unsigned int debut_du_mot = 0;
unsigned int i = 0;
while (file[pos+i] != '\n')
{
if (file[pos+i] == '\t')
{
vline.push_back(std::string(file+pos+debut_du_mot,i - debut_du_mot));
debut_du_mot = i+1;
}
++i;
}
vline.push_back(std::string(file+pos+debut_du_mot,i - debut_du_mot));
pos = pos + i+1;
}
この関数は、11 988 400回と呼ばれる:
ボトルネックは、この機能です。
vline
は、ベクトルの作成と破棄を避けるための同じ文字列ベクトルです。
この機能を改善するにはどうすればよいですか?
PS:行は最大1〜2語で構成されます。
私はpush_back関数で賭けています。ベクトルを任意のサイズで初期化しますか?デフォルトを使用しますか?デフォルトを使用する場合はそこに多くのサイズ変更が必要です(結果的に再割り当て) –
おそらく、これが呼び出されている場所を見て、より良いインターフェースを選択することができます。おそらく 'std :: string'を構築することを含まないものです。 –
@PedroDavid私はtline vlineを使用しています。 vline.reserve(2); – Fractale