似乎每当您向
例如,在运行以下代码后:
std::vector
添加新元素时,如果没有空元素,则分配的元素数量会加倍(至少在GCC 4.9中是这样)。我认为这样做是为了实现摊销常数时间复杂度。例如,在运行以下代码后:
v.push_back (1);
v.push_back (2);
v.push_back (3);
v.push_back (4);
v.push_back (5);
v.shrink_to_fit(); // capacity is 5 now
v.push_back (6);
std::cout << v.capacity () << std::endl;
输出结果是10。
在内存受限的系统中,是否有任何方法可以防止这种行为发生,即使以性能惩罚为代价?
此外,是否可能指示它仅分配固定数量的元素,而不是将其加倍?
我知道我可以在添加新元素之前调用
std::vector :: reserve()
,但在我的情况下似乎很混乱...调用std::vector :: shrink_to_fit()
是另一种方法,但也不方便。
v.reserve(v.size() + 1)
,然后再执行push_back
。 - dlfv.reserve(v.size() + 1)
会使得v.capacity()
至少为v.size() + 1
,而不是恰好等于v.size() + 1
,这正是原作者的本意,而非OP所期望的。 - Cornstalks