2015-06-04 87 views
-3

這裏是我的代碼:訪問一組指針

class obj140{ 
    public: 
    int x; 
    explicit obj140(int y):x(y){ } 

    bool operator<(const obj140& rhs) const{ 
      return x < rhs.x; 
    } 
}; 

int main() { 
    obj140 * wtf = new obj140[5] {obj140(1),obj140(1),obj140(3),obj140(4),obj140(5)}; 
    std::set<obj140> orm(wtf,wtf+5); 
} 

這可能嗎?像複製指向一組的指針?我沒有錯誤,但我不知道如何訪問它。

如何打印出orm組的值?

+0

我只是簡單地想知道是否可以將動態分配的對象複製到一個集合中。 –

+1

@zenith因爲他在努力學習。卡洛,你寫的。運行它並查看它的功能。如果您有方便的調試器,請逐步完成。 – user4581301

+0

@ user4581301我編譯時沒有錯誤,但我似乎無法訪問該集合中的值。 –

回答

3

我稍微修改了您的代碼,以便更容易看到,並以此方式查看存儲在set中的項目。

class obj140 
{ 
public: 
    int x; 
    explicit obj140(int y) :x(y) 
    { 
    } 

    bool operator<(const obj140& rhs) const 
    { 
     return x < rhs.x; 
    } 

    void print() const 
    { 
     std::cout << x << std::endl; 
    } 
}; 

int main() 
{ 
    obj140 * wtf = new obj140[5] 
    { obj140(1), obj140(1), obj140(3), obj140(4), obj140(5) }; 

    std::set<obj140> orm(wtf, wtf + 5); 

    for (auto it = orm.begin(); it != orm.end(); ++it) 
    { 
     it->print(); 
    } 
    delete[] wtf; //edit. Forgot to clean up the pointer. 
    return 0; 
} 

輸出:

1 
3 
4 
5 

你在做什麼工作,並加載set。由於set僅存儲唯一值(並對它們進行排序,如果需要,可以進行快速排序),則第二次添加的obj140(1)被丟棄。

+0

Ooooo你使用了一個迭代器。如果它被丟棄了,它會被銷燬嗎? –

+0

迭代器可以超出範圍而不影響集合的內容。你可以同時在同一個容器上運行一堆迭代器。只是在迭代時不要更改容器。結果很糟糕。注意:由於orm被聲明爲包含'obj140'而不是'obj140 *',所以orm保存了wtf元素的副本。 – user4581301