在函数内部使用数组方法

时间:2014-09-26 04:24:40

标签: c++ arrays pointers parameter-passing

如果只能将指针传递给数组,那么如何在函数中使用.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 个答案:

答案 0 :(得分:1)

您将int[5]类型与std::array<int, 5>混淆。这些是不同的东西。

第一种类型(“裸”数组)没有成员并且可以自动衰减到指向int的指针,这确实指向第一个元素并传达有关数组的 no 信息长度。

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 &参数),您将能够使用这些方法。