clang tidy 抱怨 push_back into vector in a loop

clang tidy complains about push_back into vector in a loop

这是我的代码(工作正常),以及 IDE 的投诉: 我尝试使用 vector<string> result(tmp.size()); 设置矢量大小,但在那之后,结果将在前面包含 tmp.size() 数量的空字符串,我不想使用 insert

有没有更好的解决方法?

"pre-allocate"这里不是说resize向量到最终大小,也就是vector<string> result(tmp.size()); 确实如此,但要 保留 最终大小的内存:

vector<string> result;
result.reserve(tmp.size());

如评论中所述,纯属性能优化。它不会改变代码的行为。 reserve 调用将导致分配一个足够大的内存块来容纳最终的向量大小,但尚未构造任何元素,这仍将通过 push_back.[=16= 完成]

这是一个性能优化,否则向量的最终大小是未知的,因此它可能需要在循环期间多次重新分配内存块,这将(对于大尺寸渐近地)增加循环时间采用常数因子,假设字符串的长度是有界的并且对 mph->getValue() 的调用是 O(1),否则效果将不那么显着。