将类成员向量的内容复制到另一个向量中,然后将它们交换回来
Posted
技术标签:
【中文标题】将类成员向量的内容复制到另一个向量中,然后将它们交换回来【英文标题】:Copy contents of a class member vector into another vector and then swapping them back 【发布时间】:2015-02-06 02:14:40 【问题描述】:所以我有以下格式的两个类:
class HashMinHeap
private:
vector<int> MiniHeap;
public:
...
];
class HashTable
private:
vector<HashMinHeap*> table;
public:
...
;
我想创建第二个向量vector <HashMinHeap*> table2
,将table
的内容复制到table2
,然后我将对table
进行一些操作,最终将删除table
的内容,所以为了保留它的内容,我想将原始内容从table2
back 换回table
。有人知道如何进行复制和交换吗?
谢谢!
注意 当我进行复制和交换时,table
中包含 HashMinHeap
objects。
【问题讨论】:
不明白。你想对你的向量做一些时髦的可变操作,但又不想失去它的内容?为什么不直接复制它并对副本进行可变操作?此外,当您复制vector of pointers
时,请注意该向量只会进行浅拷贝。换句话说,副本仍将指向相同的指针(相同的HashMinHeap
对象)。
如何正确制作副本,使副本上的可变操作不会破坏原件?
你为什么使用vector to pointers
?为什么不只是vector<HashMinHeap> table
?在这种情况下,该向量的完整副本就像vector<HashMinHeap> myFullCopy = table;
一样简单。你使用vector to pointers
可能有一个很好的理由,如果你能解释一下,那就太好了。对我来说非常不清楚的另一件事是为什么你要复制一些对象,修改它,然后把它扔掉?您要解决的更大问题是什么?
我想要一种方法来跟踪向量中的空槽,方法是让槽指向 NULL。有更好的方法吗?
我的任务是为冲突结果创建一个带有单独链接的哈希表。但是,链接必须是最小堆实现。我已经有一个函数,deleteMin,它找到最小的元素,然后从数据结构中删除它。现在我想按升序打印所有元素,所以我想重用我的 deleteMin 函数,但也要保留数据结构的内容。
【参考方案1】:
关于“如何深度克隆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....
【讨论】:
以上是关于将类成员向量的内容复制到另一个向量中,然后将它们交换回来的主要内容,如果未能解决你的问题,请参考以下文章