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 的字符串,它的工作速度可以接受(<100ms),但对于几百万个字符的字符串,它的速度会慢到爬行(几十分钟,可能是几小时)。我没有看到除此之外的任何东西kG会产生非线性。我没有看到访问器函数kG是非常量时间的任何理由,但是在这个循环中没有别的东西。kG不幸的是,由于缺乏文档,我不知道如何工作。

问题:给定一个二进制数据块作为 std::string,构造字节列表的有效方法是什么?

4

2 回答 2

2

kG是定义在kh中的宏,扩展为((x)->G0),即跟随 K 对象的 G0 指针

http://kx.com/q/d/a/c.htm#Strings文档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 回答