使用具有未定义行为的 (STL) 复制
Use of (STL) copy with undefined behaviour?
在评估中,我选择了LINE I上的运行时错误选项。没有未定义行为这样的选项,尽管我认为这将是正确的选择。
我不确定,但我认为评估中存在错误。我编译并运行了该程序,它确实使用三种不同的编译器(Cpp.sh,此处和Mac OS X本地(打印3, 9, 0, 2, 1, 4, 5,
。
由于LINE I,该程序是否具有未定义的行为?
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void printer(int i) {
cout << i << ", ";
}
int main() {
int mynumbers[] = { 3, 9, 0, 2, 1, 4, 5 };
vector<int> v1(mynumbers, mynumbers + 7);
copy(mynumbers, mynumbers + 7, v1.end());//LINE I
for_each(v1.begin(), v1.end(), printer);//LINE II
return 0;
}
是的,它是 UB。
std::copy
要做的第一件事是取消引用v1.end()
,这样做会导致未定义的行为。
相关文章:
- 具有 STL 向量类型成员的类的复制内存
- 如何复制存储在数组中的 STL 对象?
- STL向量上出现奇怪的复制构造函数错误
- 是否有任何常规方法可以通知 STL 移动和复制构造函数?
- STL算法函数,如累加,如果传递给它们的函数接受引用,请避免复制
- 从 C 数组进行 STL 阵列,无需复制
- 有没有一种 stl 方法来执行指针向量的深度复制
- 使用具有未定义行为的 (STL) 复制
- STL 复制、配对、矢量和插入器
- 如何使用密钥 2 更新 STL 映射键 1 并将值复制到键 2 中
- 如何使用STL复制地图,过滤和减少C 的行为
- 不必要的对象复制 - C++ STL
- stl 优先级队列中的堆管理是否调用复制构造函数
- 为什么stl::list会复制添加到列表中的元素
- 从函数复制成本返回STL向量
- 从STL复制函数以打印出矢量
- 使用STL复制省略(以矢量为例)
- STL复制函数的实现
- STL 复制在"typedef"类型的数组上失败
- 是否可以将STL复制功能与地图一起使用