Seg Fault在C++容器上循环

viv*_*vek 0 c++ std

这是代码(找到2组的联合):

template <class dtype>
void printSet(dtype data)
{
    std::cout<<"\n";
    for(auto i = data.begin(); i != data.end(); i++)
    {
        std::cout<<*i<<" ,";
    }
}

int main(int argc, char const *argv[])
{
    int arr[] = {1,2,3,4,5};
    std::set<long long> a(arr, arr + 5), b(arr, arr + 5), c;
    std::vector<long long> v;
    b.insert(1000);
    printSet(a);
    printSet(b);
    set_union(a.begin(), a.end(), b.begin(), b.end(), v.begin());
    printSet(v);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

1 ,2 ,3 ,4 ,5 ,
[1]    9444 segmentation fault  ./a.out
Run Code Online (Sandbox Code Playgroud)

我在哪里搞砸了?

Dir*_*ple 8

v是空的,所以写v.begin()不可能.你应该使用std::back_inserter(v).


Luc*_*ore 6

set_union期望一个有效的输出迭代器,在某种意义上它应该被允许在该迭代器上写入.v是空的,所以v.begin()不是有效的迭代器.

尝试将矢量声明为

std::vector<long long> v(42);
Run Code Online (Sandbox Code Playgroud)