更改std中的向量::在同一向量上变换
Changing vector inside std::transform on the same vector
我想弄清楚它是否允许在变换内更改向量。考虑代码:
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,我也不应该依靠正确的输出。
上面没有for_each
。某些情况下的某些变化是有效的,其他情况则无效。你不是。通常,迭代器无效使迭代无效。从矢量中添加或删除元素会使末端迭代器无效(以及插入/删除点或之后的所有迭代器)。重新分配使所有迭代器无效。
反向迭代器遵循基于基本迭代器的有效性的不同规则。但是前向情况已经是UB。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 如何在 c++ 中将变换与对的向量一起使用
- 如何在 CPU 上计算向量变换?
- 可视化:如何使用R&T向量仿射变换Point3D?
- 更改std中的向量::在同一向量上变换
- 使用“变换”创建增加的向量
- 使用变换和加 () 对向量的元素进行求和和模 10^9+7<int>。有什么办法可以做到这一点吗?
- C++指针的变换向量
- std::对向量的向量进行变换
- 将 RANSAC 应用于向量<Point2f>以进行相似性变换
- 在c++中变换向量的向量
- 对包含特征向量的矩阵应用变换的更简便的方法
- std::变换一个向量