我最近從頭開始編寫我的第一個程序,但不是該領域的專業人員,我擔心我可能沒有使用最合適的解決方案。用更合適的類代替`std :: vector`
在我的程序中,我必須使用不斷添加和刪除元素的對象列表(以及列表清單),而不必在列表的開頭或結尾。
使用指針列表不是一個選項,提供了需求。
當我開始時,我知道只有std::vector
類,因此我使用它,儘管知道它需要連續的內存,因此這種選擇會導致重複的重新分配。
在嘗試解決另一個問題時,我發現還有其他類可能更適合此任務,如std::list
和std::deque
。
我主要是通過使用索引
myvector[index].function();
的,並且我用的是最標準的功能訪問的對象是
myvector.size();
myvector.begin();
myvector.pop_back();
myvector.push_back();
myvector.insert(myvector.begin()+offset, number, new_element);
,我還沒有任何重載函數/操作員。
你能爲我的範圍建議最好的容器/雙向鏈表嗎?
是否有可能將std::vector
無縫替換爲其他標準容器?
我有什麼特別的問題需要注意?
大多數'std :: vector'實現都非常聰明,並且預分配內存,所以每次添加或刪除元素時都不需要重新分配內存。在擔心性能之前,* benchmark *! –
是的,所有的標準容器都有幾乎相同的界面,所以換個基準測試應該很容易。我還推薦參考[如此](http://en.cppreference.com/w/cpp/container)(您可以在其中找到每個容器支持的定位表)。 –
[std :: vector vs. std :: list vs std :: slist?]的相對性能可能重複(http://stackoverflow.com/questions/238008/relative-performance-of-stdvector-vs-stdlist -vs-stdslist) – TemplateRex