C++ 我不知道';我不明白如何正确使用set_差异

C++ 我不知道';我不明白如何正确使用set_差异,c++,algorithm,C++,Algorithm,在任务中,有人说有必要从数组中获取最大元素的“值”。然后将其与第二个数组进行比较,并排除重复项 在任务中,有必要在向量中使用部分排序复制,并设置差异 问题是,当您启动程序时,即使没有显示错误的确切内容,程序也会崩溃,这就是我在这里写作的原因 我查看了几个使用此功能的网站,但我使用了所有这些功能,不太明白为什么它不工作和崩溃 #include<iostream> #include<vector> #include <algorithm> using names

在任务中,有人说有必要从数组中获取最大元素的“值”。然后将其与第二个数组进行比较,并排除重复项

在任务中,有必要在向量中使用部分排序复制,并设置差异

问题是,当您启动程序时,即使没有显示错误的确切内容,程序也会崩溃,这就是我在这里写作的原因

我查看了几个使用此功能的网站,但我使用了所有这些功能,不太明白为什么它不工作和崩溃

#include<iostream>
#include<vector>
#include <algorithm>

using namespace std;

int main() 
{
    int value = 5;
    int A_ints[] { 1, 4, 12, 5, 1, 4, 6, 9, 0, 3 };
    vector<int> A_vec(value);
    vector<int> B_vec { 13, 12, 11, 10 };
    vector<int> C_vec;
    vector<int> D_vec {9, 6, 5, 4};


    partial_sort_copy(A_ints, A_ints + 9, A_vec.begin(), A_vec.end(), greater<int>());

    set_difference(A_vec.begin(), A_vec.end(), B_vec.begin(), B_vec.end(), C_vec.begin(), greater<int>());


    if (С_vec == D_vec)
         cout << "Success \n";
    else
         cout << "Failure \n";

    system("pause");
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
int值=5;
inta_ints[]{1,4,12,5,1,4,6,9,0,3};
向量A_vec(值);
向量B_向量{13,12,11,10};
向量C_-vec;
向量D_向量{9,6,5,4};
部分排序拷贝(整数,整数+9,矢量开始(),矢量结束(),更大());
设置差异(A_vec.begin()、A_vec.end()、B_vec.begin()、B_vec.end()、C_vec.begin()、更大的值);
如果(С_vec==D_vec)
cout第5个参数to是算法结果将写入的参数

您已传入
C_vec.begin()
,它是指向空向量的迭代器。写入空向量的迭代器是未定义的行为

这里有几个问题,但解决这个问题的一个方法是将
C\u vec.begin()
替换为:


打印出对算法函数的每次调用的结果,以查看您正在使用的函数。您可能因为缺乏研究/工作而被否决。结果不只是数字12吗?请参阅此可爱的博客以获取帮助。另请参阅以获取有关函数如何工作的详细信息。您多次引用概念或规范您的问题中没有出现,因此我们无法确切知道您需要做什么,也无法知道您认为自己理解了什么。您缺乏调试证据,因此很难知道您得到了什么以及您期望得到什么。您的程序有未定义的行为。您正试图将值填充到
C_-vec
,而这些值却没有空间容纳。@PaulMcKenzie,部分排序拷贝工作完全正确,我之前检查过,他还给我向量{12,9,6,5,4}。我把你的建议放在第五位,但它突出显示了“插入器”,并给了我错误:“std::inserter”缺少实例与参数列表匹配的函数模式。#包括used@InvalidDog很抱歉,您需要使用一个非常量迭代器。我错误地编写了
cbegin
,该迭代器应该是
begin
我已经编辑过了。哦,我明白了。非常感谢。С:您能解释一下为什么
std::inserter
使用的迭代器在插入导致向量中的重新分配?@fjardon每次对其容器成员调用
insert
时,
insert\u迭代器的迭代器成员都将更新。您可以在此处看到
insert\u迭代器
的可能实现:注意
insert\u迭代器的赋值运算符实现:
iter=container->insert(iter,std::move(value));
++iter;
返回*this;
inserter(C_vec, begin(C_vec))