2013-07-21 56 views
0

我遇到的问题是我需要使用复制功能从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; 

}

回答

1
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); 
0

你试图从一个空的范围内复制。

copy(ptr,ptr,output); 

将永远不会打印任何东西。