设定差的输出可以存储在第一个输入中吗?

NoS*_*tAl 3 c++ stl c++11

如果我有2个向量(或双端队列):

我可以将它们的set_difference存储在第一个向量中吗?

再次从cpp Wiki参考中得到以下示例:

std::vector<int> v1 {1, 2, 5, 5, 5, 9};
std::vector<int> v2 {2, 5, 7};
std::vector<int> diff;

std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), 
                    std::inserter(diff, diff.begin()));
Run Code Online (Sandbox Code Playgroud)

如果将其更改为:

std::vector<int> v1 {1, 2, 5, 5, 5, 9};
std::vector<int> v2 {2, 5, 7};

std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), 
                    v1.begin());
Run Code Online (Sandbox Code Playgroud)

注意,第一个输入表示我是第一个向量,是的,我知道STL适用于范围,而不适用于容器。

Pra*_*ian 5

根据N3797,§25.4.5.4/ 2 [set.difference]

要求:结果范围不得与任何原始范围重叠。

因此,如果您尝试将结果写入任何一个输入范围,则行为将不确定。