微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在列表向量上调用clear会清除每个索引处列表中的所有节点吗?

如何解决在列表向量上调用clear会清除每个索引处列表中的所有节点吗?

我正在创建一个具有私有数据成员vector<list<pair<K,V>>> hashTable;的哈希表。我的理解是,重新哈希函数应将原始表的元素分配给临时表,清空原始表,调整其大小,然后将临时表的元素哈希回原始表。

诸如vector<list<pair<K,V>>> tempTable = origTable;之类的作业会进行深拷贝吗?还是我需要声明tempTable的大小与原始表的大小相同,然后遍历每个索引的每个列表并将其添加tempTable

最后,调用origTable.clear();会清空每个索引中每个列表中的所有节点并正确回收内存吗?还是我需要浏览每个索引并显式清空每个列表中的信息?

谢谢

解决方法

C ++中的类型约定是具有复制语义的,并且std::vectorstd::liststd::pair都遵守这一点。

因此,vector<list<pair<K,V>>> tempTable = origTable;进行了“深层复制”,并且不保留对旧数据的引用。同样,在这样的向量上调用.clear()将破坏所有使用的内存。

,
vector<list<pair<K,V>>> tempTable = origTable;

所有内容都将从向量,列表中复制并配对,一直复制到K和V。但是,值得考虑的是,如果K和/或V本身是指针,则将复制该指针,但复制它们的对象指向不会,并且您将具有别名。

,

是的。向量的复制分配很深。元素将被复制。

调用clear将删除标准向量中的所有元素。所有这些对象均被销毁。标准迭代器的析构函数会销毁其所有节点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。