[英]How do I check if an array of objects is empty/null?
可以說我有一個這樣聲明的對象數組:
Object Array[100];
int count = 0;
bool exit;
do
{
if (Array[count] == "")
{
//code that stores data
exit = true;
}
else
{
count++;
}
}
while (exit != true);
我一直在編譯器中顯示錯誤消息:
error: no match for ‘operator==’ in ‘Array[count] == ""'
我知道我可以使用for循環函數正確地存儲它們,甚至可以使用向量,但是現在,我必須使用此方法來檢查數組是否為空/空。 知道怎么做嗎? 我在這里看到了很多示例,但是幾乎所有示例都是string / int / float等數組。
使用以下方法創建數組時: Object Array[100];
它已經為您的Object
創建了 100個內存插槽,並為每個插槽調用了默認的構造函數。
物理上,在引用行之后,數組中有100個元素。
從邏輯上講,您可以決定多少,最好還是保存該數字以進行count
。
如果Object
的默認值在初始化方面還不夠,那么您可以通過幾種方法來檢查其內容是否已初始化:
bool isInitialized()
) const char *
作為參數的operator==
並將其與""
進行比較。 operator==
,該operator==
將另一個Object
用作參數,並將其與""
進行比較,假定Object
具有來自const char *
的c'tor。 數組本身不能為“空”。
Object Array[100];
是創建100個Object
的數組的聲明。 它們已經構造並存在(如果默認可構造)。
如果類型Object
具有某種“空”狀態的概念,則可以檢查該狀態(例如std::vector
提供了成員.empty()
來檢查是否為空。),也可以使用容器來保存數據(這也使其成為堆的一部分,而不是堆棧存儲器的一部分,並實現動態調整大小。
std::vector<Object> vec;
int count = 0;
// do stuff...
do
{
if (count >= vec.size())
{
//code that stores data
exit = true;
}
else
{
count++;
}
}
while (exit != true);
而您也可以說std::size_t count = vec.size();
。
Object Array[100];
不能為空。 另一方面,可以將指向動態分配數組的指針初始化為nullptr並對此進行檢查:
Object *Array = nullptr;
if(!Array) // or Array == nullptr
cout << "Array is empty (unallocated)" << endl;
Array = new Array[100];
if(Array) // or Array != nullptr
cout << "Array is NOT empty" << endl;
Array[count]
沒有任何意義。 您正在以索引count
(這對索引來說是個壞名字)訪問元素,並將其與const char*
進行比較。 std::vector
是必經之路。 上面的代碼(以及除使用std::vector
之外的所有代碼)-丑陋和不良做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.