Problem E: 向量的刪除

qq_41711504發表於2018-05-26

Problem E: 向量的刪除


Time Limit: 
1 Sec  Memory Limit: 128 MB
Submit: 275  Solved: 168

Description

定義Vec類,是由int型別的資料組成的向量,過載其輸入、輸出運算子,以及減法運算子。
其中,輸入一個整型向量時,輸入的是一個非減排序的整數序列,其中包含重複值,在輸入時,重複值只保留1個,即Vec類中的向量是遞增排序且不含重複值的。
輸出時,兩兩之間用一個空格隔開。
減法運算,從第1個Vec物件中刪除第2個Vec物件中的元素,不能修改兩個運算元的值。
注意:刪除後,有可能結果為空集。

Input

輸入有2行。每行是一個向量。
每行第一個值是一個正整數N>0,表示後面有N個輸入的整數。

Output

見樣例。

Sample Input

10 1 1 1 3 3 3 4 5 8 85 1 2 3 4 5

Sample Output

v1:1 3 4 5 8v2:1 2 3 4 5v1:1 3 4 5 8v2:1 2 3 4 5v3:8

HINT

Append Code


#include <bits/stdc++.h>
using namespace std;
class Vec
{
    public:
        int t;
        set<int> p;
        Vec(){}
        friend istream &operator>>(istream &is,Vec &A)
        {
            int m,n;
            cin>>m;
            A.t=m;
            while(m--)
            {
                cin>>n;
                A.p.insert(n);
            }
            return is;
        }
        friend ostream &operator<<(ostream &os,Vec &A)
        {
            set<int>::iterator it;
            for(it=A.p.begin();it!=A.p.end();it++)
            {
                if(it==A.p.begin())
                    cout<<*it;
                else
                    cout<<" "<<*it;
            }
            cout<<endl;
            return os;
        }
        friend Vec operator-(Vec &A,Vec &B)
        {
            Vec C=A;
            set<int>::iterator it;
            set<int>::iterator iter;
            for(it=B.p.begin();it!=B.p.end();it++)
            {
                iter=C.p.find(*it);
                if(iter!=C.p.end())
                C.p.erase(iter);
            }
            return C;

        }


};
int main()
{
    Vec v1, v2, v3;
    cin>>v1;
    cin>>v2;
    cout<<"v1:"<<v1;
    cout<<"v2:"<<v2;
    v3 = v1 - v2;
    cout<<"v1:"<<v1;
    cout<<"v2:"<<v2;
    cout<<"v3:"<<v3;
    return 0;
}


相關文章