2016-02-12 75 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++。