清除嵌套数据

Clearing nested data

本文关键字:数据 嵌套 清除      更新时间:2023-10-16

我有一个这样的map数据

std::map<std::string, std::vector<int>> mydata;

该功能mydata.clear();如何工作?
它是否也清除vector<int>中的项目?
是否需要先清除vector项,然后再清除地图?

mydata.clear()清除map中的数据。您定义的map存储std::vector<int>;值 nature 可确保调用向量的析构函数,并且还清除其内容和分配的内存。

从 cpp 首选项;

从容器中删除所有元素。 使引用所包含元素的任何引用、指针或迭代器失效。

vector的析构函数反过来管理其资源;

破坏容器。调用元素的析构函数,并解除分配使用的存储。请注意,如果元素是指针,则不会销毁指向的对象。

这里的经验法则是容器将管理容器的资源;内存,大小,分配等,容器中的值需要依次管理其资源。这种资源管理的方法和技术通常被称为RAII,被许多人认为是惯用C++。

clear()的行为是这样定义的:

内容
清晰 从映射容器中删除所有元素(这些元素将被销毁(,使容器大小为 0。

您的地图使用纯vectors,而不是指针或对它们的引用。这些向量本身存储不需要(也不支持(手动取消分配的普通ints

因此,当您调用mydata.clear()时,map包含的vectors将被正确销毁,其内容也将正确销毁。