【发布时间】:2015-12-31 18:26:57
【问题描述】:
当我在预先知道最终大小的情况下填充 std::vector 时,我通常会提前保留其容量以避免重新分配其内容(在 C++03 中,这涉及为已存储在 @987654323 中的每个对象调用复制构造函数@)。
这是一个简单的例子:
std::vector<std::string> v;
v.reserve(10);
for( std::vector<std::string>::size_type i = 0, capacity = v.capacity();
i < capacity;
++i )
{
v.push_back(std::to_string(i));
}
有更好的方法(更少的 C 风格)来循环 std::vector 容量?
我正在寻找 C++03 和 C++11 的答案。
编辑:我重写了示例,因为所有答案和 cmets 都偏离了主题,仅涉及用数组填充 std::vector,这不是问题的重点。
【问题讨论】:
-
比什么更好?你想避免的当前
fill有什么问题? -
您可能只是想将数组转换为向量? stackoverflow.com/questions/8777603/…
-
它只适用于
std::vector<T> v(t, t + size);。 -
@Lorenzo,什么是“循环容量”???
-
@Lorenzo:请注意,在您的
std::vector::reserve(n)之后,容量可能大于n,因此您将向量填充为特定于实现的大小...