【发布时间】:2018-05-14 06:24:48
【问题描述】:
我正在尝试填充字符串类型的向量,并且字符串的内存将定期更新。我在论坛中发现,由于每次更新内存重新分配,这两个过程都会消耗大量时间大小,我还读到保留功能几乎可以解决这两种情况的问题。 -> String & vector
我的向量不需要超过 1024 个插槽,每个字符串需要 10 个字符空间。 我为我的向量保留了 1024 个内存插槽。
vector<string> power_set;
power_set.reserve(1024);
但是有没有办法为向量槽内的字符串保留内存槽?
提前致谢。
【问题讨论】:
-
字符串有一个
reserve()函数。所以是的,您可以遍历容器并为每个字符串保留足够的空间。 -
您是否考虑过使用
std::array<char, 10>而不是std::string? -
您实际上可能不需要对 10 个字符的字符串调用 reserve,因为小字符串优化确实避免了分配。
-
也许您不应该相信您在论坛上阅读的所有内容?
string和vector不会在每次您更改大小时重新分配内存。重新分配很少发生,足以使其成为amortized constant time。此外,1024 是一个足够小的数字,您几乎不会注意到任何差异。 -
这是有道理的@BoPersson .. 感谢您的信息.. 那么我想我可以不用reserve() 函数
标签: c++ string vector stl c++14