2015-04-19 211 views
1

可以說我有一個對象數組聲明如下:如何檢查對象數組是否爲空/空?

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等等數組。

回答

1

該數組本身不能爲空。

Object Array[100]; 

是一個聲明,創建一個數組100 Object s。它們已經構建並存在(如果默認可構造的話)。

如果類型Object有一些「空」狀態的概念,您可以檢查該狀態(例如,A 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();

+0

好的,我做了一些關於向量的研究,並設法將我的數組轉換爲向量,但是在我編譯完成後,我遇到了編譯器告訴我沒有名爲空的成員的問題。我正在使用!vec [0] .empty()來檢查向量是否爲空。 – Zac

+0

'vec.empty()'告訴你'vector'本身是否爲空。 'vec [0] .empty()'是兩個表達式,並且在向量的第一個元素上調用'empty()'。因此vector的conent類型需要支持'empty()'。如果你想要一個結構體可以有一個填充元素6但是空的元素4,你需要進一步的間接尋址(例如指針或智能指針)。 – Pixelchemist

+0

含義我不能使用'.empty'本身?因爲我有一個類似'vec [count] .empty()'的函數。然後每次執行檢查,如果一切正常,它會「計數++」並前往下一個位置進行檢查。 – Zac

1

當你使用創建數組:Object Array[100];已經創建 100內存插槽,爲您Object S,並要求他們中的每一個默認的構造函數。

  • 從物理上看,陣列中有100個元素位於引用行之後。

  • 從邏輯上說,有多少就像你決定的那樣,它最好把這個數字保存到count


如果Object的默認c'tor是不夠的初始化條件,那麼你必須檢查的天氣幾種選擇它的內容被初始化與否:

  • 可以添加一個方法(即bool isInitialized()
  • 您可以添加一個operator==,它將const char *作爲參數並將其與""進行比較。
  • 您可以添加一個operator==,將另一個Object作爲參數,並將其與""進行比較,前提是Object的c'tor從const char *開始。
0

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以外的所有內容) - 醜陋和不好的做法。