如果只能将指针传递给数组,那么如何在函数中使用.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);
}
答案 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 &
参数),您将能够使用这些方法。