在同一向量上更改 std::transform 内的向量

微信

我想弄清楚是否允许在转换中更改向量。考虑代码:

std::vector<int> v;
for (int i = 0; i < 10; i++) v.push_back(i);

for (auto &i : v) std::cout << i << " ";
std::cout << std::endl;
std::transform(v.begin(), v.end(), std::back_inserter(v),
          [](auto i) { return i;});

for (auto &i : v) std::cout << i << " ";
std::cout << std::endl;

我希望使用基于现有矢量内容的元素来扩展矢量。这是输出:

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 

但是如果我用 rbegin 替换开始和结束并相应地撕裂输出如下:

0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 0 0

我在最后一个位置得到意外的 0 而不是 1。这让我怀疑这段代码本身是否是 UB,我也不应该依赖前向迭代器的正确输出。

Yakk - Adam Nevraumont

for_each上面没有在某些情况下的某些更改是有效的,其他则不是。你的不是。通常迭代器失效会使迭代无效。从向量中添加或删除元素会使结束迭代器(以及插入/删除点或之后的所有迭代器)无效。重新分配使所有迭代器无效。

反向迭代器根据其基本迭代器的有效性遵循不同的规则。但前锋的情况已经是UB了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向量添加赋值与`std :: transform`

来自分类Dev

C ++在结构向量上使用std :: transform

来自分类Dev

std :: transform超过两个向量

来自分类Dev

从多个线程为同一向量的不同范围调用std :: copy是否安全?

来自分类Dev

多个线程在同一向量的不同向量上同时添加元素发生错误

来自分类Dev

在std :: unique_ptr的向量上使用make_transform_iterator获取const指针

来自分类Dev

同一向量中最接近的其他值

来自分类Dev

std :: transform在临时对象上

来自分类Dev

std :: transform在临时对象上

来自分类Dev

指针向量上的std :: find()

来自分类Dev

boost :: transform与std :: transform

来自分类Dev

numpy:如何统一向量?

来自分类Dev

C ++ std对与向量加速

来自分类Dev

C ++ std对与向量加速

来自分类Dev

std :: chrono ::毫秒的向量

来自分类Dev

我可以将向量中的子向量项添加到同一向量中的另一个子向量吗?

来自分类Dev

C ++中的std矩阵的std向量(向量的向量)

来自分类Dev

向量内的向量-更改特定元素

来自分类Dev

std :: transform的最后一个参数

来自分类Dev

在结构向量的向量内搜索

来自分类Dev

当第一个向量重新分配时,另一个向量内的std :: vectors是否会重新分配?

来自分类Dev

从向量的std :: tuple遍历选定的向量

来自分类Dev

std :: std :: tuple的向量导致未知大小

来自分类Dev

使用std :: vector的互补向量

来自分类Dev

将一个向量元素分配给同一向量中并非自身的另一个元素(Secret Santa算法)

来自分类Dev

在向量内寻找项目

来自分类Dev

在reduce内更新向量

来自分类Dev

与std :: transform等效的元组

来自分类Dev

std :: transform订单保证

Related 相关文章

热门标签

归档