gpt4 book ai didi

c++ - std::vector::reserve 是否保证在这种情况下实现不会使迭代器无效?

转载 作者:IT老高 更新时间:2023-10-28 22:37:25 25 4
gpt4 key购买 nike

这是一个旨在:

a) 接受一个整数 vector

b) 对于输入 vector 中的每个 int,附加这个 int 的倒数

前提条件:无

后置条件:返回 vector 的 size() 正好是 2 * 输入 vector 的大小。

请注意, vector 是就地修改的。

问题:

这个函数在转换期间是否严格定义了针对迭代器失效的行为?

奖金:

有没有更好/更简洁/健壮的写法?

代码:

std::vector<int> append_negatives(std::vector<int> v)
{
v.reserve(v.size() * 2);
std::transform(begin(v), end(v),
back_inserter(v),
[](auto&& x) { return -x; });
return v;
}

最佳答案

只要不超过预先分配的容量,就不会发生重新分配,并且引用 vector 项的任何引用或迭代器都不应该失效。但是,由于 end() 返回的迭代器没有引用任何 vector 项,它仍然可能会失效。

23.3.11.3 vector capacity [vector.capacity]

  1. ...No reallocation shall take place during insertions that happen after a call to reserve() until the time when an insertion would make the size of the vector greater than the value of capacity()

...

23.3.11.5 vector modifiers [vector.modifiers]

  1. ...If no reallocation happens, all the iterators and references before the insertion point remain valid.

关于c++ - std::vector::reserve 是否保证在这种情况下实现不会使迭代器无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46132706/

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