2016-10-10 2 views
1
5,10,15,20,25 // first deque 
50,40,30,20,10 // second deque 

vintersec이 교차 벡터 인 반면에 합집합 벡터입니다. 아래는 노동 조합과 교차점을 찾는 코드입니다. 누군가가 더 쉬운 해결책을 가지고 있다면, 공유 할 수 있습니다. 마침내 나는 노동 조합 교차점을 원합니다.2 큐의 결합과 교차 (비정상 분할 오류)

다음은 비정상적인 분할 오류를 나타내는 코드입니다. -g 플래그로 컴파일 할 때

deque<int> first = {5,10,15,20,25}; 
    deque<int> second = {50,40,30,20,10}; 
    vector<int> v(first.size()+second.size());      
    vector<int>::iterator it; 
    sort (first.begin(),first.end());  // 5 10 15 20 25 
    sort (second.begin(),second.end()); // 10 20 30 40 50 

    //union 
    //line 79 
    it=set_union (first.begin(), first.end(), second.begin(), second.end(), v.begin()); 
    v.resize(it-v.begin()); 

    // now finding intersection 

    vector<int> intersec(first.size()+second.size());      
    it=set_union (first.begin(), first.end(), first.begin(), second.end(), intersec.begin()); 
    intersec.resize(it-intersec.begin()); 

는 지금, 나는 gdb를 사용하고 다음은 내가 BT에 문제를 이해 할 수없는 오전 역 추적 스택

0x000000000040a010 in std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m<std::_Deque_iterator<int, int&, int*>, int*> (__first=<error reading variable: Cannot access memory at address 0x0>, __last=0, __result=0x623ef0) at /usr/include/c++/5/bits/stl_algobase.h:340 
340   *__result = *__first; 
(gdb) bt 
#0 0x000000000040a010 in std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m<std::_Deque_iterator<int, int&, int*>, int*> (
    __first=<error reading variable: Cannot access memory at address 0x0>, __last=0, __result=0x623ef0) at /usr/include/c++/5/bits/stl_algobase.h:340 
#1 0x0000000000409156 in std::__copy_move_a<false, std::_Deque_iterator<int, int&, int*>, int*> (__first=0, __last=0, __result=0x623d04) 
    at /usr/include/c++/5/bits/stl_algobase.h:402 
#2 0x00000000004077d2 in std::__copy_move_a2<false, std::_Deque_iterator<int, int&, int*>, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > > 
    (__first=0, __last=0, __result=0) at /usr/include/c++/5/bits/stl_algobase.h:438 
#3 0x0000000000405c99 in std::copy<std::_Deque_iterator<int, int&, int*>, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > > (__first=0, 
    __last=0, __result=0) at /usr/include/c++/5/bits/stl_algobase.h:472 
#4 0x0000000000404020 in std::__set_union<std::_Deque_iterator<int, int&, int*>, std::_Deque_iterator<int, int&, int*>, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__ops::_Iter_less_iter> (__first1=0, __last1=0, __first2=0, __last2=0, __result=0, __comp=...) 
    at /usr/include/c++/5/bits/stl_algo.h:4965 
#5 0x0000000000402b8c in std::set_union<std::_Deque_iterator<int, int&, int*>, std::_Deque_iterator<int, int&, int*>, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > > > (__first1=5, __last1=0, __first2=5, __last2=0, __result=5) at /usr/include/c++/5/bits/stl_algo.h:5011 
#6 0x0000000000401b3b in main() at test.cpp:79 

입니다.

it=set_union (first.begin(), first.end(), first.begin(), second.end(), intersec.begin()); 

올바른 방법으로해야합니다 :

it=set_union (first.begin(), first.end(), second.begin(), second.end(), intersec.begin()); 

나는 그것이 오타 추측

+3

typo :'it = set_union (첫 번째 .begin(), first.end(), first.begin(), second.end(), intersec.begin()); .begin(), first.end(), second.begin(), second.end(), intersec.begin()); 또한 실제로'set_intersection'을 호출하지 않습니다. – user4407569

+0

오, 낮, 일이 완벽하게 지금 일 했어, 고마워. 너는 내 하루를 보냈다. –

답변

0

은 내가 set_union의 실수()가 있다고 생각합니다.