请考虑以下代码.
struct MyData{
MyData(const BYTE* pData, size_t uSize)
: bucket_(pData, pData + uSize)
{}
std::vector<BYTE> bucket_;
};
Run Code Online (Sandbox Code Playgroud)
从一对迭代器初始化时,我bucket_是第reserve一个做的吗?有点像vec.reserve(std::distance(begIter, endIter)).
或者它只是简单地执行严重的push_back或back_inserter_iterator::operator=?
如果没有,我可能需要用uSize0 初始化它然后执行memcpy_s构造函数块.
eer*_*ika 23
从一对迭代器初始化时,我
bucket_是第reserve一个做的吗?
是的,它确实有效.
标准草案:
复杂性:仅对N的复制构造函数进行N次调用(其中N是第一个和最后一个之间的距离),如果迭代器的第一个和最后一个是前向,双向或随机访问类别,则不进行重新分配.它使命令N调用T的复制构造函数和命令log(N)重新分配,如果它们只是输入迭代器.
(指针是随机访问迭代器)
是的,保证不会有重新分配,因为指针是RandomAccessIterators.vector.cons/9
Run Code Online (Sandbox Code Playgroud)template <class InputIterator> vector(InputIterator first, InputIterator last, const Allocator& = Allocator());效果:
[first, last)使用指定的分配器构造一个等于范围的向量.复杂性:使只
N调用的拷贝构造函数T(这里N是之间的距离first和last),并没有重新分配,如果迭代器第一个和最后为正向,双向,或随机访问类别.如果它们只是输入迭代器,它N会对复制构造函数T和命令log(N)重新分配进行顺序调用.
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |