清除嵌套数据

时间:2016-02-12 10:22:03

标签: c++ dictionary

我有map这样的数据

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

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

2 个答案:

答案 0 :(得分:1)

clear() is defined that way的行为:

  

内容清晰
  从地图容器中删除所有元素(已销毁),使容器的大小为0。

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

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

答案 1 :(得分:1)

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

来自cppreference;

  

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

vector's destructor反过来管理其资源;

  

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

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