gpt4 book ai didi

c++ - 使用迭代器构造 std::vector 时不需要保留吗?

转载 作者:行者123 更新时间:2023-12-02 04:11:26 26 4
gpt4 key购买 nike

因此,当我使用迭代器调用 vector 的构造函数时,即:

template <class InputIterator> vector (InputIterator first, InputIterator last);

在构造函数开始添加元素之前,我似乎无法确保底层数组中保留足够的空间。这是否意味着在构造过程中可能会调整该数组的大小,或者我是否可以假设构造函数通过某种方式查看迭代器和对象大小之间的“距离”来推断正确的大小? (不确定这是否在所有情况下都可能?)

最佳答案

根据标准,[vector.cons]/10

Complexity: Makes only N calls to the copy constructor of T (where N is the distance between first and last) and no reallocations if iterators first and last are of forward, bidirectional, or random access categories. It makes order N calls to the copy constructor of T and order logN reallocations if they are just input iterators.

这意味着如果向前传递、双向或随机访问迭代器,则保证不会发生重新分配,那么这些情况下不需要 reserve。对于输入迭代器来说,没有这样的保证。

关于c++ - 使用迭代器构造 std::vector 时不需要保留吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59171770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com