首先,在分析代码并确定存在瓶颈之前不要进行优化。通过做一些聪明的事情来考虑可读性、可访问性和可维护性的成本。确保您采取的任何计划都不会妨碍您将来使用 Unicode。还在?好吧。
正如其他人所提到的,向量保留的内存比它们最初使用的更多,并且 push_back 通常非常便宜。
但是,在某些情况下,使用 push_back 重新分配的内存超出了必要的范围。例如,对 myvector.push_back() 的一百万次调用可能会触发 myvector 的 10 或 20 次重新分配。另一方面,在其末尾插入向量将导致 myvector* 最多 1 次重新分配。出于速度和可读性的原因,我通常更喜欢插入习语而不是 reserve / push_back 习语。
myvector.insert(myvector.end(), inputBegin, inputEnd)
如果您事先不知道字符串的大小并且不能容忍由重新分配引起的打嗝,可能是因为硬实时限制,那么也许您应该使用链表。链表将以更差的平均性能为代价获得一致的性能。
如果所有这些都不足以满足您的目的,请考虑其他数据结构,例如绳索或回发有关您的案例的更多细节。
- 来自 Scott Meyer 的 Effective STL,IIRC