向量是否知道在由一对迭代器初始化时首先保留?
Does vector know to reserve first when initializing by a pair of iterators?
请考虑以下代码。
struct MyData{
MyData(const BYTE* pData, size_t uSize)
: bucket_(pData, pData + uSize)
{}
std::vector<BYTE> bucket_;
};
从一对迭代器初始化时,我的bucket_
是否首先执行reserve
? 像vec.reserve(std::distance(begIter, endIter))
.
或者它只是简单地执行严重的push_back
或back_inserter_iterator::operator=
?
如果没有,我可能需要用 0 的uSize
初始化它,然后在构造函数块中执行memcpy_s
。
从一对迭代器初始化时,我的
bucket_
是否首先执行reserve
?
是的,它确实有效。
标准草案:
复杂性:仅对 T 的复制构造函数进行 N 次调用(其中 N 是第一个和最后一个之间的距离),如果第一个和最后一个迭代器属于前向、双向或随机访问类别,则不进行重新分配。它对 T 的复制构造函数进行顺序 N 调用,如果它们只是输入迭代器,则对 log (N) 重新分配进行顺序调用。
(指针是随机访问迭代器)
是的,可以保证不会有重新分配,因为指针是随机访问迭代器。 vector.cons/9
template <class InputIterator> vector(InputIterator first, InputIterator last, const Allocator& = Allocator());
效果:使用指定的分配器构造一个等于范围
[first, last)
的向量。复杂性:仅对
T
的复制构造函数进行N
调用(其中N
是first
和last
之间的距离),并且没有 如果迭代器的第一个和最后一个是前向的,则重新分配, 双向或随机访问类别。它发出命令N
调用 到T
的复制构造函数,并订购log(N)
重新分配,如果 它们只是输入迭代器。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 向量是否知道在由一对迭代器初始化时首先保留?
- 有没有一个C++版本在循环结束后将在for循环初始化中声明的变量保留在作用域中
- 如何在不初始化每个元素的情况下为数组保留空间
- C++默认初始化是否保留先前的零初始化
- 用保留向量初始化向量的向量
- Char*没有在我的类中保留文本-初始化构造函数问题