使用动态分配的set_intersection?

时间:2015-10-07 12:44:44

标签: c++ dynamic allocation

我正在阅读set_intersection并且它似乎希望用户提前分配正确的空间量(或更多),但这不是很奇怪吗?在c ++中,您经常使用std::vector来动态分配空间。当基于结果数据大小(动态)分配明显更有效时,为什么set_intersection会隐式地要求预先分配空间?是否希望在事先知道交叉点大小时最大化性能?如果不知道交叉点大小的常见情况呢?

是否有任何神奇的方式"为每个添加到向量的元素直接分配一个槽?

1 个答案:

答案 0 :(得分:3)

  

并且似乎期望用户提前分配正确的空间量(或更多)

不,它没有(除非我误解了你的问题):

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

int main()
{
    //vectors to intersect
    std::vector<int> first{1,2,4,3,8,6,7,5};
    std::vector<int> second{3,15,4,16,36};
    //they need to be sorted 
    std::sort(first.begin(), first.end()); //{1,2,3,4,5,6,7,8}
    std::sort(second.begin(), second.end()); //{3,4,15,16,36}

    //intersection result
    std::vector<int> intersection;

    //intersecting
    std::set_intersection(first.begin(), first.end(),
                          second.begin(), second.end(),
                          std::back_inserter(intersection));

    //output: 3,4
    for(int n : intersection)
        std::cout << n << ",";
}