Когда я выполняю этот код, меня выдает: Ошибка сегментации (дамп ядра). Что мне следует изменить в коде?

#include<iostream>
#include<set>
#include<vector>
#include<algorithm>

using namespace std;

int main(){

    int *even=new int[100];

    int *temp=new int[100];

    for(int i=0;i<100;i++){
        even[i]=2*i+2;
        temp[i]=2*i+1;  
    }
    set <int,less<int> > odd(temp,temp+100);

    vector <int> vec;

    merge(even, even+100,odd.begin(), odd.end(), vec.begin());

    for(int i=0;i<100;i++){ cout<<"merged vector is:" <<vec[i]<<endl; 

    }
    return 0;
}
c++
-2
xyxzwww 30 Дек 2017 в 18:53

2 ответа

Лучший ответ

vec пуст, а merge не может (не может) изменить его размер с помощью обычного итератора.
Вот почему был изобретен std::back_inserter - это "итератор", который использует push_back для добавления элементов:

merge(even, even+100, odd.begin(), odd.end(), back_inserter(vec));

Поскольку вам известен размер результата, вы также можете "предварительно изменить размер" vec и использовать текущий метод:

vector <int> vec(100 + odd.size());
merge(even, even+100, odd.begin(), odd.end(), vec.begin());
1
molbdnilo 30 Дек 2017 в 16:18

Изменить vector<int> vec;

Кому: vector <int> vec (100+odd.size());

0
StPiere 30 Дек 2017 в 16:18