使用具有未定义行为的 (STL) 复制

Use of (STL) copy with undefined behaviour?

本文关键字:STL 复制 未定义      更新时间:2023-10-16

在评估中,我选择了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(),这样做会导致未定义的行为。