2015-02-06 66 views
-1

所以我有以下格式兩類:類成員矢量到其他載體的複製內容,然後交換回

class HashMinHeap { 
private: 
    vector<int> MiniHeap; 
public: 
    ... 
]; 

class HashTable { 
private: 
    vector<HashMinHeap*> table; 

public: 
... 
}; 

我想創建第二個向量,vector <HashMinHeap*> table2,複製table內容到table2,然後我要去做一些操作到table,最終將刪除table的內容,所以爲了保留它的內容,我想將原始內容從table2換回到table。任何人都知道如何進行復制和交換? 謝謝! 注意tableHashMinHeap當我做複製和交換的對象。

+0

不明白這一點。你想對你的矢量做一些時髦的可變操作,但不想鬆散它的內容?爲什麼不復制它並在副本上進行可變操作?另外,當你複製一個「指針向量」時,要注意向量只是做一個淺拷貝。換句話說,副本仍然指向相同的指針(相同的'HashMinHeap'對象)。 – tofi9 2015-02-06 02:47:13

+0

如何正確製作副本,以便副本上的可變操作不會破壞原件? – Jovan 2015-02-06 03:08:49

+0

爲什麼你使用'vector指針'?爲什麼不只是'矢量表'?在這種情況下,該向量的完整副本就像'vector myFullCopy = table;'一樣簡單。你可能有一個很好的理由,你爲什麼使用vector作爲指針,如果你能解釋它,那將是非常棒的。另一件我不清楚的是你爲什麼要拷貝一些對象,修改它,然後把它扔掉?你試圖解決什麼更大的問題? – tofi9 2015-02-06 03:12:30

回答

0

在這個問題:「如何深克隆一個vector of pointers

使用拷貝構造函數,如下面所示。

#include <iostream> 
#include <vector> 

using namespace std; 


class HashMinHeap { 
public: 
    string s; 
    vector<int> MiniHeap; 

    HashMinHeap() { } 

    HashMinHeap(const HashMinHeap& other) : MiniHeap(other.MiniHeap), s(other.s) { } 
}; 

class HashTable { 
public: 
    vector<HashMinHeap*> table; 

    HashTable() { } 

    HashTable(const HashTable& other) { 
     for(auto& item : other.table) { 
      table.push_back(new HashMinHeap(*item)); 
     } 
    } 
}; 

int main(int argc, const char * argv[]) { 
    HashTable table; 
    table.table.push_back(new HashMinHeap); 
    table.table.push_back(new HashMinHeap); 
    table.table[0]->s = "Hello world...."; 
    table.table[1]->s = "Hello universe...."; 

    HashTable tableCopy = table; 
    tableCopy.table[0]->s = "Changed...."; 

    cout << "original1 " << table.table[0]->s << endl; 
    cout << "original2 " << table.table[1]->s << endl; 
    cout << "copy " << tableCopy.table[0]->s << endl; 
    cout << "copy2 " << tableCopy.table[1]->s << endl; 
    return 0; 
} 

結果

original1 Hello world.... 
original2 Hello universe.... 
copy Changed.... 
copy2 Hello universe....