Ric*_*ges 14 c++ stdvector language-lawyer c++11
这是一个打算:
a)接受int的向量
b)对于输入向量中的每个int,追加此int的逆
先决条件:无
postconditions:返回vector的size()是2*输入向量的大小.
请注意,矢量是就地修改的.
在变换期间,此函数是否严格定义了与迭代器失效相关的行为?
是否有更好/更简洁/更健壮的方式来编写它?
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;
}
Run Code Online (Sandbox Code Playgroud)
use*_*670 14
只要您不超过预分配容量,就不会发生重新分配,也不会使引用矢量项的引用或迭代器失效.但是,由于返回的迭代器end()未引用任何向量项,因此它仍可能无效.
23.3.11.3载体容量[vector.capacity]
- ...在调用之后发生的插入期间不应进行重新分配,
reserve()直到插入使向量的大小大于值的值为止.capacity()
...
23.3.11.5向量修饰符[vector.modifiers]
- ...如果没有重新分配,插入点之前的所有迭代器和引用仍然有效.