为什么 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
.
之间的距离
我有以下代码:
#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
.