1

以下は長い文字列に対して非常に遅いです:

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];
}

100k までの文字列では十分高速 (100 ミリ秒未満) に動作しますが、数百万文字の文字列では低速 (数十分、場合によっては数時間) になります。それ以外kGに非線形性を生み出すものはないと思います。アクセサー関数が一定時間ではない理由はわかりませkGんが、このループには他に何もありません。kG残念ながら、ドキュメントが不足しているため、どのように機能するかはわかりません。

質問: std::string としてバイナリ データのブロブが与えられた場合、バイト リストを作成する効率的な方法は何ですか?

4

2 に答える 2

2

kGkhで定義されたマクロで、に展開され((x)->G0)ます。つまり、K オブジェクトの G0 ポインタに従います。

http://kx.com/q/d/a/c.htm#Strings documents kp、文字列から直接 K 文字列オブジェクトを作成するため、おそらく実行できますK klist = kp(s.c_str())。これはおそらく高速です

于 2014-01-09T17:18:22.033 に答える
0

これは機能します:

memcpy(kG(klist), s.c_str(), s.length());

なぜそのループが O(N) でないのか、まだ疑問に思っています。

于 2014-01-09T00:40:03.580 に答える