2014-01-15 21 views
-1

我一直在試圖找到一種方法來刪除矢量的第一個元素。刪除矢量的第一個元素並釋放C++中的內存

vector<int*> vec; 
\\elements get added to the vector throughout the code 

if(GetNumIntsInVec() != 0){ 
    this->vec.erase(this->vec.begin()); 
} 

但是,這是行不通的。

我還需要刪除()嗎?我的代碼會使整個矢量消失嗎(我需要以某種方式保存矢量嗎?) 我的測試表明它不是釋放內存或刪除整個矢量。

謝謝!

+3

什麼是'vector'?你可以顯示'vector'的完整聲明(如'std :: vector vector')?並請描述你的意思是「不工作」。 – Anthony

+0

我添加了一些更多的細節 – user3196347

+0

矢量中沒有元素? – michaeltang

回答

2

std::vector<T>類會照顧自己的內容並銷燬包含的對象。銷燬指針意味着「無所事事」。如果你想通過一個元素將被自動刪除指向的對象,你需要使用的東西,看起來在delete後,例如std::unique_ptr<T>

std::vector<std::unique_ptr<int>> vec; 
vec.emplace_back(new int(17)); 
vec.erase(vec.begin()); 

...或者你需要明確照顧delete元素。

順便說一句:清除std::vector<T>前面的物體效率相當低!如果你真的試圖實現類似隊列的東西,那麼使用std::queue<T>或者如果你需要隨機訪問元素std::deque<T>要好得多。雖然std::vector<T>需要在正向擦除位置之後洗牌所有元素,但std::deque<T>可以在前端和末尾高效地擦除。

+0

謝謝! :) 你在我腦海中引發了正確的想法並修復了它 – user3196347