为什么 std::set_intersection 不起作用?

Why is std::set_intersection not working?

我有以下代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
// your code goes here
int t;
cin>>t;
while(t--)
{
    string a;
    string b;
    cin>>a;
    cin>>b;
    vector<char> v1(a.begin(),a.end());
    vector<char> v2(b.begin(),b.end());

    sort(v1.begin(),v1.end());
    sort(v2.begin(),v2.end());
    vector<char> c;
    auto ls = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),c.begin());
    cout<<"hello"<<endl;
    cout<<ls-c.begin()<<endl;
    cout<<c.size()<<endl;

}
return 0;
}

在set_intersection行之后没有打印任何内容,甚至与交叉线无关的"hello"也不打印,为什么??

它不起作用,因为 c。这意味着 c.begin() 等于 c.end(),取消引用结束迭代器会导致 未定义的行为

您需要在向量中插入元素,例如使用 std::back_inserter:

auto ls = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(c));

虽然这有一个问题:set_intersection 将 return 的迭代器是您传递给 set_intersection 函数的 back_inserter 迭代器的末尾。该迭代器与 c.begin() 无关,这意味着您不能真正做到 ls - c.begin().

不幸的是,真的没有办法得到初始 back_inserter(c) 迭代器和 ls.

之间的距离