2014-09-26 4 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

당신은 std::array<int, 5>와 유형 int[5]을 혼동하고 있습니다. 이것들은 다른 것들입니다.

첫 번째 유형 ("순"배열) 회원이 없습니다 첫 번째 요소에 실제로 점을 수행하고 에게 배열의 길이에 대한 더 정보를 전달하지 않는 자동으로 포인터 - 투 - INT로 붕괴 할 수 있습니다.

std::array은 경계 배열 검사 (std::array::at() 사용) 및 다른 표준 STL 컨테이너 메서드를 베어 배열 위에 제공하는 템플릿 클래스입니다.

std::array<int, 5> a1 = {{1,2,3,4,5}};int a1[] = {1,2,3,4,5}; 교체 (그리고 std::array<int, 5> const & 매개 변수를 사용하는 Solution::testArray()의 서명을 업데이트) 당신은이 방법을 사용할 수 있습니다.

+0

물론이 사실은 많은 것을 해결합니다. 감사! – user3478252