我有map
这样的数据
std::map<std::string, std::vector<int>> mydata;
函数mydata.clear();
如何工作?
是否也清除vector<int>
中的项目?
是否需要先清除vector
项目,然后清除地图?
答案 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 ++。