2014-09-26 49 views
0

如果只能傳遞指向數組的指針,如何在函數中使用數組方法,如.size() and .empty(),因爲指針只是指向第一個元素?在函數中使用數組方法

我具體詢問有關使用數組方法而不是查找方法來檢查數組大小或數組是否爲空。

例如,你將如何獲得array.empty()在下面的代碼工作?

class Solution{ 
public: 
    void testArray(int &array)[5]){ //or (int* array) or (int array[]) 
     std::cout << array.empty() << std::endl; 
    } 
} 

int main(int argc, const char * argv[]) 
{ 
    int a1[] = {1,2,3,4,5}; 
    Solution s1; 
    s1.testArray(a1); 
} 

回答

1

您在混淆int[5]std::array<int, 5>。這些是不同的事情。

第一種類型(「裸」數組)沒有成員,並且可以自動衰減爲指向int的指針,該指針確實指向第一個元素,並傳達關於數組長度的信息。

std::array是一個模板類,它在裸露數組的頂部提供邊界檢查(使用std::array::at())和其他標準STL容器方法。

int a1[] = {1,2,3,4,5};替換爲std::array<int, 5> a1 = {{1,2,3,4,5}};(並更新Solution::testArray()的簽名以取std::array<int, 5> const &參數),您將可以使用這些方法。

+0

好吧,這肯定會清除很多東西了。謝謝! – user3478252 2014-09-26 14:10:50