我需要询问有关std :: set_intersection的问题。我已将它用于列表,如果我正在使用
,则效果很好std::set_intersection(list1.begin(),list1.end(),list2.begin(),list2.end(), std::back_inserter(Get_intersect));
但我从未将它用于数组。如果我在这里拿阵列怎么样?我在参数中使用了数组,并希望执行交集。
std::set_intersection(a[].begin(),a[].end(),list2.begin(),list2.end(), std::back_inserter(Get_intersect));
收到此错误:syntax error : ']'
。如果我从[]
删除此a[]
,则无法开始和结束我的数组。
答案 0 :(得分:0)
您可以使用std::begin
和std::end
。
std::set_intersection(
std::begin(a), std::end(a),
list2.begin(), list2.end(),
std::back_inserter(Get_intersect)
);
请注意,由于a
不是一个集合,因此您需要注意它是否已排序(这是std::set_intersection
工作的先决条件,请参阅set_intersection documentation。
完整示例:
#include <algorithm>
#include <iostream>
#include <iterator> // for std::begin and std::end
#include <set>
#include <vector>
void printVector(std::vector<int> vec)
{
for (std::vector<int>::const_iterator i = vec.begin(); i != vec.end(); ++i)
{
std::cout << *i << ' ';
}
std::cout << std::endl;
}
int main(int argc, char ** argv)
{
int a[5] = { 1, 2, 3, 4, 5 };
std::vector<int> list2;
list2.push_back(2);
list2.push_back(4);
std::vector<int> intersection;
std::set_intersection(
std::begin(a), std::end(a),
list2.begin(), list2.end(),
std::back_inserter(intersection)
);
printVector(intersection);
}
答案 1 :(得分:0)
如果你有一个实际的数组(而不是指针),那么你可以使用std::begin
和std::end
来获得#34;迭代器&#34;对于阵列。
那些基本上做的是给你指针到开头和结尾(加一)。如果你有大小的话,你实际上可以自己传递指针:
int* pointer_to_array = ...;
size_t num_elements = ...;
some_function_taking_iterators(
pointer_to_array, // This is the begin "iterator"
pointer_to_array + num_elements // This is the end "iterator"
);