添加到std :: vector的中间

cal*_*pto 4 c++ string vector

有没有办法vector在C++ 的中间添加值?说我有:

vector <string> a;
// a gets filled up with "abcd", "wertyu", "dvcea", "eafdefef", "aeefr", etc
Run Code Online (Sandbox Code Playgroud)

我想分解其中一个字符串并将所有部分放回到字符串中vector.我该怎么办?我打破的字符串可以是任何地方,索引= 0,中间某处或索引= a.size() - 1.

tem*_*def 9

您可以通过写入插入vector到位i

v.insert(v.begin() + i, valueToInsert);
Run Code Online (Sandbox Code Playgroud)

但是,这不是很有效; 它在插入元素后与元素数量成比例地运行.如果您打算拆分字符串并将其重新添加,那么最好使用a std::list,它支持在任何地方插入和删除O(1).

  • 声明一个`std :: list`有O(1)插入总是对我有点误导.假设您已经确切地知道要插入的位置(并指向它),则为O(1).但是,如果你首先需要`find()`要插入的位置 - 它的O(n)要查找,然后*然后*O(1)要插入,对吗? (8认同)
  • 性能全部取决于相关数据量.我发现矢量对于性能来说相当于列出高达半兆的左右. (4认同)
  • 真的很长std :: lists <>得到了糟糕的性能,因为CPU无法进行缓存预取,每个链接都是间接指针查找. (4认同)
  • 那好吧.我的矢量很短,所以表现不是问题.然而.我想我必须出于某种原因使用矢量.我得检查一下 (3认同)