[英]How can I deallocate the last element of an array in C++?
我有一個像這樣動態分配的數組: a[1,2,3,*unallocated value*]
,它有 4 個元素。 我還有一個length
變量,我知道它有多長。
我想刪除此數組中的最后一個元素並將其設置為未分配或以某種方式取消初始化。
我認為這樣的事情可能會起作用a[lenght-1]=*something-something*
但我不知道最后放什么。 有沒有辦法可以取消分配單個元素? 或者我是否必須創建一個新數組並將除最后一個元素之外的所有元素復制到其中?
提前致謝。
您正在尋找的*something-something*
稱為sentinel
。
例如,如果您的數組只能包含正整數,您可以使用值0
來表示“空”槽。 或-1
。
但是,如果允許任何整數值,這將不起作用。
另一方面 - 為什么您需要在該插槽中放置任何值? 您可以簡單地依靠您的length
變量來確定該元素是否有效。
回答你的問題:
如何在 C++ 中釋放數組的最后一個元素?
例子:
int *p_original_array = new int[5];
int *p_shorter_array = new int[4];
//...
std::copy(p_original_array, p_original_array + 4, p_shorter_array);
delete [] p_original_array;
首先,您始終可以將某些內容設置為 NULL 指針。 但我認為對於您的用例,您想要使用向量。 Vector 使用數組作為數據結構,但您可以在末尾添加/刪除元素。 (如果向量填充是數組,它將創建一個更大的數組並復制所有內容,因此無需擔心長度)
目前尚不清楚您是否只想通過 end 刪除元素,或者是否可以在任何位置發生。
在第一種情況下,您可以使用 length 變量來存儲“已用長度”和另一個變量(可能名為“容量”)來存儲數組的實際容量。 第一個永遠不會大於第二個,但它可以更小。 這是一個非常簡單的解決方案:如果將大小設置為 3,則索引 3 不再可用,並且您無事可做。
在第二種情況下,我會建議@Vlad Feinstein 的回答中描述的哨兵策略。
由於您有一個指示數組中有效元素數量的length
,因此無需將值復制到新數組中。 只需減少length
。 根據數組中使用的數據類型,重置最后一個元素的值可能有意義也可能沒有意義。
例如,重置一個整數根本沒有意義,但如果你願意,你可以,例如:
a[--lenght] = 0;
但是,重置std::string
以釋放它可能在內部使用的任何動態內存確實有意義,例如:
a[--lenght] = "";
a[--lenght] = string();
--lenght;
a[lenght].clear();
a[length].shrink_to_fit();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.