在列表向量上调用 clear() 会清除列表中每个索引处的所有节点吗?
Will Calling clear() on a vector of lists clear all the nodes in the list at each index?
我正在创建一个具有私有数据成员 vector<list<pair<K, V>>> hashTable;
的散列 table。我的理解是,rehash 函数应该将原始 table 的元素分配给临时 table,清空原始 table,调整它的大小,散列临时 [=23] 的元素=]回到原来的table.
vector<list<pair<K,V>>> tempTable = origTable;
之类的赋值会进行深拷贝吗?或者我是否需要声明 tempTable
与原始 table 大小相同,然后遍历每个索引处的每个列表并将其添加到 tempTable
?
最后,调用 origTable.clear();
会清空每个列表中每个索引处的所有节点并正确回收内存,还是我需要遍历每个索引并显式清空每个列表?
谢谢
C++ 中类型的约定是具有复制语义,std::vector
、std::list
和 std::pair
都遵循这一点。
因此 vector<list<pair<K,V>>> tempTable = origTable;
执行 'deep copy',并且不保留对旧数据的引用。并且类似地在这样的向量上调用 .clear()
将破坏所有使用的内存。
是的。 vector 的复制赋值很深。将复制元素。
调用clear
将从标准向量中删除所有元素。所有这些对象都被销毁了。标准迭代器的析构函数会销毁它的所有节点。
vector<list<pair<K,V>>> tempTable = origTable;
一切都会复制,从向量、列表和对一直到 K 和 V。但是,值得考虑的是,如果 K and/or V 本身是指针,那么指针将被复制但是他们指向的对象不会,你会有别名。
我正在创建一个具有私有数据成员 vector<list<pair<K, V>>> hashTable;
的散列 table。我的理解是,rehash 函数应该将原始 table 的元素分配给临时 table,清空原始 table,调整它的大小,散列临时 [=23] 的元素=]回到原来的table.
vector<list<pair<K,V>>> tempTable = origTable;
之类的赋值会进行深拷贝吗?或者我是否需要声明 tempTable
与原始 table 大小相同,然后遍历每个索引处的每个列表并将其添加到 tempTable
?
最后,调用 origTable.clear();
会清空每个列表中每个索引处的所有节点并正确回收内存,还是我需要遍历每个索引并显式清空每个列表?
谢谢
C++ 中类型的约定是具有复制语义,std::vector
、std::list
和 std::pair
都遵循这一点。
因此 vector<list<pair<K,V>>> tempTable = origTable;
执行 'deep copy',并且不保留对旧数据的引用。并且类似地在这样的向量上调用 .clear()
将破坏所有使用的内存。
是的。 vector 的复制赋值很深。将复制元素。
调用clear
将从标准向量中删除所有元素。所有这些对象都被销毁了。标准迭代器的析构函数会销毁它的所有节点。
vector<list<pair<K,V>>> tempTable = origTable;
一切都会复制,从向量、列表和对一直到 K 和 V。但是,值得考虑的是,如果 K and/or V 本身是指针,那么指针将被复制但是他们指向的对象不会,你会有别名。