我有一个map
数据这样结算嵌套数据
std::map<std::string, std::vector<int>> mydata;
如何进行功能mydata.clear();
工作?
是否也清除vector<int>
中的项目?
是否需要先清除vector
项目,然后清除地图?
我有一个map
数据这样结算嵌套数据
std::map<std::string, std::vector<int>> mydata;
如何进行功能mydata.clear();
工作?
是否也清除vector<int>
中的项目?
是否需要先清除vector
项目,然后清除地图?
的clear()
is defined that way行为:
清除内容
从地图中删除容器中的所有元素(其被破坏),离开容器的大小为0。
你的地图使用普通的vectors
,而不是指向它们的指针或引用。这些向量本身存储不需要(也不会支持)手动未分配的普通ints
。
因此,当您拨打mydata.clear()
时,vectors
包含的内容将被正确销毁,其内容也会被正确销毁。
mydata.clear()
清除map
中的数据。您定义的map
按的值存储std::vector<int>
;值本质可确保向量的析构函数被调用,并且其内容和分配的内存也被清除。
来自cppreference;
删除容器中的所有元素。 使引用包含元素的引用,指针或迭代器失效。
vector
's destructor反过来管理其资源;
破坏容器。元素的析构函数被调用,并且使用的存储被释放。请注意,如果元素是指针,则指向的对象不会被销毁。
这里的经验法则是容器将管理容器的资源;内存,大小,分配等,并且容器中的值需要依次管理其资源。这种资源管理的方法和技术通常被称为RAII,被许多人认为是惯用的C++。
您的地图按值存储矢量,因此当您调用clear()时,这些矢量将消失(它们的析构函数将被调用)。你不需要先手动清理它们。 –