簡體   English   中英

如何檢查對象數組是否為空/空?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM