2017-12-10 7 views
0

이것은 간단한 질문 일 수 있습니다. :최소 데이터 구조를 만들기 위해 파일을 두 번 반복하는 것이 가치가 있습니까?

각 행에 하나의 값이 있도록 파일 형식이 있다고합니다. 이 파일을 읽고 각 값을 배열 또는 벡터에 저장한다고 가정 해 보겠습니다.

벡터 방식은 간단합니다. 파일에서 한 줄을 읽고 벡터에 삽입합니다.

배열을 사용하여 볼 수있는 유일한 방법은 한 번 파일의 모든 줄을 반복하여 계산 한 다음 해당 크기의 배열을 만든 다음 각 줄을 두 번 반복하여 값을 저장하는 것입니다.

더 나은 접근 방법은 무엇입니까? 벡터의 부피가 너무 커야 피할 수없는 장애물이 있습니까? 이것은 관련성이 없으며 파일을 두 번 반복하여 반복적으로 방해가됩니까?

+1

그런데 파일 크기를 확인하고 각 줄 값의 평균 바이트 수로 나누는 방법이 있습니다. – Potatoswatter

+0

C++의 표준 컨테이너 ('vector','list' 등)는 필요에 따라 포함 된 요소의 수로 크기를 변경할 수 있습니다. 사전에 크기를 알고 있으면 (예 : 사전 계산) 크기가 중요하지 않은 경우 도움이됩니다. 일반적으로 파일을 두 번 실행하면 작은 파일에는 큰 차이가 없지만 대용량 파일에는 훨씬 더 나을 것입니다. 메모리 액세스는 I/O 장치 액세스보다 훨씬 빠릅니다. – Peter

+0

벡터에 단점도 없습니다. 정확하게 "부피가 큰"것은 아닙니다. 배열과 비교할 때 오버 헤드가 발생합니다 (8 바이트?). – Galik

답변

0

vector을 사용하면 데이터의 각 바이트가 평균 두 번 RAM에 기록됩니다.

디스크를 사용하는 경우 각 바이트는 디스크 또는 캐시에서 평균 두 번 읽습니다.

RAM이 디스크보다 빠르며, 일반적으로 vector이 더 나은 방법입니다.

성능 분석에서 확실하게 말할 수있는 유일한 방법은 두 가지 방법을 모두 시도하고 측정하는 것입니다. 과학 FTW.