我试图找到2个字符串之间的交叉点。我使用以下代码:
std::string a = "asd", b = "afd";
std::string intersect;
std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(intersect));
它成功编译,但在运行程序后,瞬间崩溃并出现以下错误:
有什么建议导致这个问题?
答案 0 :(得分:3)
您应先将a
和b
排序,然后再将其传递给std::set_intersection()
:
template< class InputIt1, class InputIt2, class OutputIt > OutputIt set_intersection( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first ); (1) template< class InputIt1, class InputIt2, class OutputIt, class Compare > OutputIt set_intersection( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first, Compare comp ); (2)
构造一个从
d_first
开始的排序范围,该排序范围包含在排序范围[first1, last1)
和[first2, last2)
中找到的元素。 第一个版本希望两个输入范围都使用operator<
排序,第二个版本希望使用给定的比较函数comp
对它们进行排序。
所以,添加
std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());