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

Vam*_*han 0 c++ stl set-intersection

我有以下代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

在 set_intersection 线之后没有打印任何内容,甚至没有与相交线无关的“hello”,为什么?

Som*_*ude 5

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

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

auto ls = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(c));
Run Code Online (Sandbox Code Playgroud)

但是有一个问题:set_intersection将返回的back_inserter迭代器是您传递给set_intersection函数的迭代器的结尾。该迭代器与c.begin()这无关,这意味着您无法真正做到ls - c.begin().

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