我有一個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()時,這些矢量將消失(它們的析構函數將被調用)。你不需要先手動清理它們。 –