我正在尝试在以下 vector 中插入字符串:std::vector<std::string> fileVec
。
在我调用这些行之前,fileVec
中已经包含许多元素(最多一百万个字符串):
int index = 5;
//there is some code here to find the index i want insert the text (let's take for example has value 5)
fileVec.insert(fileVec.begin() + index, "add this text");
我的问题是插入文本需要花费很多时间(特别是如果index很小的话)。
有没有更快的方法来在大 vector 中添加元素(而不删除其他元素)?
fileVec.insert
不会被调用很多次,大约15次。
最佳答案
std::vector
并非为频繁在中间添加元素而设计的,尤其是如果它很大(一百万个元素非常大)。请考虑使用std::list
-一个双链表,其中在中间添加元素的速度非常快,因为您要做的只是要做的就是改变一些指针。在std::vector
中,所有元素都必须移动,这当然会导致大量开销。
但是同时,访问std::list
中的单个元素很慢,因为您需要遍历整个列表,直到找到所需的元素为止。
因此,选择您的毒药,但我强烈建议在这种情况下使用std::list
。
关于c++ - 有没有更快的方法可以在std::vector中插入元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59418733/