当我std::vector提前知道最终大小时,我通常会提前保留其容量以避免重新分配其内容(在C++ 03上涉及为已存储在其中的每个对象调用复制构造函数vector).
这是一个简单的例子:
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));
}
Run Code Online (Sandbox Code Playgroud)
循环std::vector容量有更好的方式(更少的C风格)?
我正在寻找C++ 03和C++ 11的答案.
编辑:我重写了样本,因为所有的答案和评论都是关于主题的,只关于用数组填充std :: vector,这不是问题的关键.
你根本不需要循环.std::vector构造函数的重载需要两个迭代器.因此,只需使用std::begin和std::next获取传入数组的开始和结束,并从中创建一个向量.
template<typename T>
std::vector<T> fill(const T* t, size_t size)
{
return {std::begin(t), std::next(std::begin(t), size)};
}
Run Code Online (Sandbox Code Playgroud)
类似地,你可以使用指针算法,这是上面的方法基本上在幕后做的事情:
template<typename T>
std::vector<T> fill(const T* t, size_t size)
{
return {t, t + size};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |