2014-01-29 1 views
1

동적 배열 int 값의 힙에 해당 요소를 저장하는 Set 개체를 어떻게 만들 수 있습니까? 특히, 이러한 사양을 가진 빈 집합을 만드는 방법은 무엇입니까? 당신이 경우동적 배열의 힙에 요소가있는 클래스 집합

:


// Morally Right (M) 2014 1-ling. All morals preserved. 

class Set 
{ 

public: 

    Set(); 
    Set(int element); 
    Set(const Set& s); 
    ~Set(); 

    bool contains(unsigned int element); 
    unsigned int getSize(); 

    int operator[](unsigned int index) const; 
    Set& operator=(const Set s); 
    Set operator+=(const Set s) const; 
    Set operator-=(const Set s) const; 
    Set operator*=(const Set s) const; 

    friend ostream& operator<<(ostream& o , const Set& s); 
    friend istream& operator>>(istream& i , const Set& s); 

private: 

    int *array = new int[size]; // IS THIS THE PATH TO SUCCESS? 
    int* elements(); 
    unsigned int size(); 
    void copy(const Set& s); 
    void resize(unsigned int new_size); 

}; 
+0

은'사용자 정의 클래스 또는 컨테이너의 어떤 종류의 이름을 Set' 있습니까? – 0x499602D2

+0

내 편집보기 ...... –

+0

UCLA에 가면이 코드를 복사하지 마십시오. 너 스스로해라. 나는 교수님이 당신이 똑같은 구조로 작업을 시작하면 이것을 벗겨 내고 싶지 않습니다. –

답변

0

일반적으로 당신이 std::vector<T>를 사용하지만 과제는 원시 C 스타일 배열을 사용 할 것을 요구하기 때문에, 내가 thusly 히 내 대답을 반복해야합니다 것이 좋습니다 것입니다 리소스 (예 : 동적 메모리)를 보유하면 RAII 관용구를 구현해야합니다. 따라서 캡슐화 구조가 범위를 벗어날 때 리소스가 할당 해제됩니다. 이 경우 적절하게 delete/delete[]을 호출 할 수 있도록 소멸자가 필요합니다. 그렇지 않으면 동적 메모리를 사용하고 할당이 해제되지 않은 경우 메모리 누수가 발생합니다.

그러나 자원을 할당하려면 new/new[]을 호출하는 생성자가 필요합니다. 복사를 구현하려면 다른 객체의 객체를 객체에 복사하는 복사 생성자가 필요합니다.


지침을 작성 했으므로 이제 시작할 수 있습니다. 앞에서 설명한 작업을 수행하기 위해 이미 적절한 기본 생성자, 복사 생성자 및 소멸자가 있습니다. 메모리 포인터를 만들려면 간단히 int* element을 사용하여 메모리에 할당하면됩니다.

For more information, see this post.

+0

그가 STL을 사용하도록 허용 된 이유는 무엇입니까? std :: set을 사용하는 것이 아니라? – jaho

+0

할 수 없습니다. 지침 : 상사는 Set 클래스에 대한 몇 가지 디자인 변경을 원했습니다. 가장 큰 변화는'Set' 객체가'int' 값의 벡터 이 아닌'int' 값의 동적 배열의 힙에있는 요소를 저장하도록하는 것입니다. 결과적으로 복사 생성자, 할당 연산자'= '및 소멸자를 재정의하여 얕은 복사본과 메모리 누수를 방지해야합니다. –

+0

나는 교수가 모든 사람들이 "감독자"밑에서 일할 것이라는 기대로 내일의 마음을 가르치고있는 것을 좋아합니다. –