【发布时间】:2023-03-25 03:39:01
【问题描述】:
我尝试过这种方式..但它太慢了,
我需要克隆包含数百万个字符 * 的向量。`
vector <char * > A ; // contains more than 1 million item.
vector <char * > B;
char * buffer=NULL;
for(long i = 0; i < A.size(); i++)
{
buffer = (char*) malloc (strlen(A[i])+1);
strcpy(buffer,A[i]);
buffer[strlen(A[i])+1]='\0';
B.push_back(buffer);
}
有比这更快的克隆向量的方法吗??
它很慢..
如果我使用
vector <char * > B=A; // when free A .. I have double free Exception (run time error ) ..
谢谢。
【问题讨论】:
-
是的,太慢了。你对此无能为力。也许改进你的算法,这样你就不需要复制它了。
-
您的第二个示例不复制字符串,而是保留原始指针,因此出现双重释放异常。你的第一种形式是正确的。
-
@H2CO3,+1,您可能还想使用字符串,这样您就可以避免使用 strcpy() 和 malloc。
-
@IbrahimAsad,考虑避免这种情况的替代方法:使用 std::shared_ptr<:vector>>,调整您的算法以一一使用处理字符串,或参考 -自己计算 char* (然后复制只会复制指针值)。
-
重要的问题是:您需要只读副本还是要克隆数据本身?