2010-03-03 3 views
11

나는 vector<set<char> > 데이터 구조 (트랜잭션 데이터베이스)가 있으며 그 크기를 알고 싶습니다. 크기가 각각 set<char>과 함께 sizeof()를 사용할 때 크기는 3, 4 또는 5 문자가 포함되어 있지만 크기는 24입니다. 나중에, vector<set<char> >와 함께 sizeof()를 사용하면 크기가 12 ... 데이터 구조의 크기를 알 수있는 방법이 아닌 것 같습니다. 어떤 도움이 필요합니까? 감사합니다. .sizeof() 벡터

+8

sizeof()는 컴파일 타임 연산자 –

답변

18

vector::size()set::size()을 원합니다.

v를 가정하면 귀하의 벡터이다, 이렇게 :

size_t size = 0; 
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) { 
    size += cit->size(); 
} 

sizeof()하는 당신에게 객체의 메모리 크기를주고있다 /이 sizeof(char) (보통 한 바이트)의 배수로에 적용되는 입력합니다.

sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type

+0

그가 이미 벡터를 예약 한 경우 어떻게됩니까? –

+1

@ 존 : 만약 그가 * *? 'reserve()'는'size()'와 아무런 관계가 없습니다. –

+0

존 (John)은 벡터 (내용)가 얼마나 많은 메모리를 차지하는지 알고 싶다면 크기가 아닌 용량을 고려해야한다는 것을 의미한다고 생각합니다. "컨테이너와 그 요소의 메모리 크기"는 당연히 모호하지만, 현재 요소가 차지하고있는 메모리의 양보다는 벡터에 의해 할당 된 메모리의 양과 관련이 있다고 생각됩니다. –

2

sizeof()이 컴파일시 계산되기 때문에 얼마나 많은 요소가 말할 수있는 방법이 없다 : 당신은 용기와 요소의 메모리 크기를 알고 싶은 경우에, 당신이 할 수 내부에있다.

벡터 개체의 size() 메서드를 사용하십시오.

7

sizeof은 개체 자체의 크기를 반환합니다. 예를 들어 배열에 대한 포인터를 포함하면 벡터의 포인터 크기 (32 비트에서 4 비트)를 계산합니다 .size

0

vector::size() 멤버 함수를 사용하여 벡터의 항목 수를 찾습니다 . 힌트 - 그들은 무료 저장소에 할당됩니다.

5

벡터는 실제 저장소에 대한 내부 포인터를 사용하여 구현됩니다. 따라서 sizeof()는 항상 데이터 저장소 자체를 포함하지 않는 동일한 결과를 반환합니다. 대신 vector::size() 방법을 사용해보십시오. 벡터에있는 요소의 수를 반환합니다. 당신이 벡터 다음 <SomeType> 내부 템플릿 매개 변수를 줄 때 STL에서

1

vector는, 클래스 템플릿이며, C++ 컴파일러는 타입 SomeType의 클래스에 대한 코드를 생성합니다. 따라서 push_back을 사용하여 벡터를 채울 때 SomeType이라는 다른 객체를 삽입하면 컴파일러에서 .size()을 요청하면 SomeType 개의 객체가 삽입됩니다.
도움이 되길 바랍니다!

+1

글쎄, 그 주위에 헛간 응답이야 ... 누가 그가'push_back'을 사용하고 있다고 말했고, 그게 어떻게 관련이 있습니까? 벡터가 관련 템플릿이라는 사실은 어떤가요? 그러나 적어도 size()는 OP가 찾고자하는 포인트입니다. –

+1

@STingRaySC sizeof는 그/그녀가 원하는 것과 아무 관련이 없다고 OP에게 설명하려고했습니다. 그는 (/ 그녀)가 찾고 있어야하는 .size() 메소드입니다. –