Печать набора с использованием функции копирования

Проблема у меня заключается в том, что мне нужно напечатать результирующий набор из функции union_set, используя функцию копирования. (Так что мне не разрешено просто помещать вывод как последний член функции set_union). Я не могу заставить функцию копирования работать правильно для указателя lastAunionB (мне нужно сделать это еще несколько раз). В настоящее время у меня есть только моя последняя попытка ответа, хотя я пробовал еще много вещей. Что я делаю неправильно с функцией копирования? Вот код

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

using namespace std;

int main()
{
int setA[5] = {2, 4, 5, 7, 8};
int setB[7] = {1, 2, 3, 4, 5, 6, 7};
int setC[5] = {2, 5, 8, 8, 15};
int setD[6] = {1, 4, 4, 6, 7, 12};

set<int> set2A(setA,setA+5);
set<int> set2B(setB,setB+7);
set<int> set2C(setC,setC+5);
set<int> set2D(setD,setD+6);int AunionB[12];
int AunionC[10];
int BunionD[13];
int AintersectB[12];
int AintersectC[10];

set<int> finalUnion;
set<int> finalIntersection;
set<int> final2Union;
set<int> final2Intersection;
set<int> final2Difference;
ostream_iterator< int > output( cout, " " );

int *lastAunionB;
int *lastAunionC;
int *lastBunionD;
int *lastAintersectB;
int *lastAintersectC;

cout << "setA = ";
copy(set2A.begin(), set2A.end(), output);
cout << endl;

cout << "setB = ";
copy(set2B.begin(), set2B.end(), output);
cout << endl;

cout << "setC = ";
copy(set2C.begin(), set2C.end(), output);
cout << endl;

cout << "setD = ";
copy(set2D.begin(), set2D.end(), output);
cout << endl;

//here is where the problem lies
cout << "AunionB = ";
lastAunionB = set_union(setA, setA+5, setB, setB+7, AunionB);
copy(lastAunionB, lastAunionB, output);
cout << endl;

/*
cout << "AunionC = ";
set_union(setA, setA+5, setC, setC+5, AunionC);
cout << endl;

cout << "BunionD = ";
set_union(setB, setB+7, setD, setD+6, BunionD);
cout << endl;

cout << "AintercectB = ";
set_intersection(setA, setA+5, setB, setB+7, AintersectB);
cout << endl;

cout << "AintercectC = ";
set_intersection(setA, setA+5, setC, setC+7, AintersectC);
cout << endl;

*/

return 0;

}

0

Решение

lastAunionB = set_union(setA, setA+5, setB, setB+7, AunionB);
copy(lastAunionB, lastAunionB, output);

Последний аргумент, который вы передаете set_union будет соответствовать началу диапазона нового построенного множества. Возвращаемое значение set_union будет конец этого диапазона.

Вы бы хотели lastAunionB и другие необработанные указатели и почти все, что вы передаете здесь в качестве итератора, который будет определен с типом std::set<int>::iterator и вы хотите скопировать диапазон следующим образом:

std::copy(AunionB, lastAunionB, output);
1

Другие решения

Вы пытаетесь скопировать из пустого диапазона.

copy(ptr,ptr,output);

никогда не будет ничего печатать.

0

По вопросам рекламы [email protected]