首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向量在用一对迭代器初始化时知道先保留吗?

向量在用一对迭代器初始化时知道先保留吗?
EN

Stack Overflow用户
提问于 2017-02-24 16:46:16
回答 2查看 1.4K关注 0票数 19

考虑下面的代码。

代码语言:javascript
复制
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_backback_inserter_iterator::operator=

如果没有,我可能需要用0的uSize初始化它,然后在构造函数块中执行memcpy_s

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-24 16:55:48

从一对迭代器初始化时,我的bucket_会先做reserve吗?

是的,它确实有效。

标准草案:

复杂性:如果迭代程序first和last属于前向、双向或随机访问类别,则只调用T的复制构造函数N次(其中N是第一次和最后一次之间的距离),并且no reallocations。如果它们只是输入迭代器,它会对T的复制构造函数和order log(N)的重新分配进行order N调用。

(指针是随机访问迭代器)

票数 23
EN

Stack Overflow用户

发布于 2017-02-24 16:56:24

是的,可以保证不会有重新分配,因为指针是RandomAccessIterators的。vector.cons/9

分配器模板向量( InputIterator first,InputIterator last,const Allocator& =

());

效果:使用指定的分配器构造一个等于范围[first, last)的向量。

复杂性:如果迭代器的第一个和最后一个是前向、双向或随机访问类别,则只对T的复制构造函数进行N调用(其中Nfirstlast之间的距离),不进行重新分配。它使order N调用T和order log(N) reallocations的复制构造函数(如果它们只是输入迭代器)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42434235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档