2016-02-12 69 views
0

我有一个map数据这样结算嵌套数据

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

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

+1

您的地图按值存储矢量,因此当您调用clear()时,这些矢量将消失(它们的析构函数将被调用)。你不需要先手动清理它们。 –

回答

1

clear()is defined that way行为:

清除内容
从地图中删除容器中的所有元素(其被破坏),离开容器的大小为0。

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

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

1

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

来自cppreference;

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

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

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

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