2014-11-08 4 views
1

보통의 크기를 찾기, 내가 그러나C에서 배열 ++

int size = sizeof(array_name)/sizeof(double) 

를 사용하여 이중 배열의 크기를 찾을 것입니다, 나는라는 클래스의 구성원으로 "등급"라는 이중 배열을 사용하고 있습니다 "등급"

class Grades{ 
    private: 
     double grades[1024]; 

    public: Grades(string gradeList); 
      Grades(); 

      int getNumGrades(); 
      string toString(); 
}; 

두 개의 배열은 나중에 생성자에 채워집니다. 그러나, 내가 할 때

cout << "size = " << (sizeof(grades)/sizeof(double)) << endl; 

그것은 항상 나에게 1024를 준다. 이것은 임의의 값을 채운 후에 생성자의 끝에있다. 나는 5 개의 값으로 그것을 채웠다. 어떻게하면 채워진 요소의 수를 반환 할 수 있습니까?

+2

당신은'표준 : : 벡터 을'사용 및 트랙 추가하고'double's의 배열에서 제거를 유지하는 모든 두통을 피할 수 있습니다 방문하시기 바랍니다. –

+0

'sizeof'는 컴파일 타임에 정의되어 있음을주의하십시오 (드문 예외는 존재합니다, 무시하십시오). 그러므로, 표현식은 항상'1024'입니다 (컴파일러는 거기에'1024'를 놓았습니다!) – Ajay

답변

2

저는 elemInArray이라는 다른 멤버가 있어야한다고 생각합니다.이 방법으로 구현 될 수 있습니다.

class Grades{ 
    private: 
     double grades[1024]; 
     unsigned int elemInArray; // Note this 

    public: Grades(string gradeList); 
      Grades(); 

      int getNumGrades(); 
      string toString(); 
}; 

그리고 당신이 요소를 삽입하거나 배열에서 요소를 제거 할 때마다, 당신이 증가하고 배열의 요소 수를 추적 할 elemInArray을 감소 할 수 있습니다.

그렇지 않으면 STL 컨테이너 (http://en.cppreference.com/w/cpp/container)를 사용하십시오.

1

배열을 만들 때 지정한 것과 항상 같은 값을 반환합니다. 배열에 몇 개의 원소가 있는지를 추적하기 위해 별도의 변수 ("count"라고 부르겠습니다)를 유지해야합니다.

-3
cout << "size = " << grades.size() 

단지 this link

+0

링크에 표시된 배열은 클래스이므로 array.size()가 가능합니다. –