2017-02-20 2 views
0

데이터 압축의 경우 파일 (여기서 텍스트 파일)을 열고 변수에 모든 내용을 저장해야합니다.문자열 대 큰 텍스트를 저장할 벡터

정말 큰 텍스트 (수백만 자 이상)를 저장하기 위해 문자열 또는 문자 벡터를 사용하는 것이 더 좋습니까?

더 나은 점은 모든 문자를 반복하는 것이 더 빠르다는 것입니다. 또한 count 함수를 사용하여 텍스트에 주어진 문자가 얼마나 많은 지 계산하는 것이 더 빠릅니다.

문자열과 벡터가 많은 문자를 저장할 수 있으므로 크기가 실제로 문제가되지 않습니다. 필요한 경우 텍스트를 몇 개의 하위 텍스트로 분리 할 수 ​​있습니다.

+2

실제 성능은 특정 C++ 구현에 따라 달라집니다. 그 점에서 문자열과 벡터 간에는 중요한 차이가 없습니다. 두 가지 모두 비슷한 기능을 제공하는 임의 액세스 컨테이너입니다. 당신은 이것을 알아 내려고 더 많은 시간을 할애 할 것이고, 아마도 가장 최적이라고 주장 된 컨테이너를 골라서 구할 수 있습니다. –

+1

실제로는 전혀 차이가 없을 것입니다. 두 유형 모두 포인터로 구현되는 (일반적으로) 순방향 반복자를 제공합니다. 의미 론적 차이점은 코드의 독자가'벡터 '에 대해 제어 된 순서에 포함 된'NUL' 문자를 기대할 가능성이 높다는 것입니다. 텍스트 파일을 다루고 있기 때문에 문제는 아닙니다. – IInspectable

+0

병목 현상은 메모리의 컨테이너가 아니라 파일 I/O입니다. * 크기를 조정할 수있는 컨테이너를 사용하거나 건설 중에 용량을 설정하는 것이 좋습니다. 파일을 읽는 동안 메모리를 재 할당하는 것은 매우 느립니다. –

답변

3

벡터 및 문자열 성능은 구현에 따라 다르기 때문에 확실한 답이 없습니다. 나는 당신의 환경에서 이러한 행동들을 벤치마킹하고 선택할 것을 제안한다.

this은 코드를 벤치마킹하고 표준이 항상 올바른 도구를 제안하지는 못하는데 대한 훌륭한 강의입니다.

퍼포먼스가 급격히 변할 수 있습니다. 예를 들어, 루프 내에서 움직이는 인스턴스화는 실제로 컴파일러 최적화를 통해 80 %의 실행 시간을 단축합니다.

성능에 대해 정말로 신경 쓰는 경우 항상 자신을 측정하십시오.

1

정말 큰 텍스트 (수백만 자 이상)를 저장하기 위해 문자열 또는 문자 벡터를 사용하는 것이 더 좋습니까?

(여기 텍스트 파일)

std::string는 텍스트 데이터에 적합하다. 대부분 컨벤션으로 인해서, 또한 std::vector이 아닌 문자열 처리를위한 기본적인 도구를 제공하기 때문입니다.

더 나은 점은 모든 문자를 반복하는 것이 더 빠르다는 것입니다. 또한 카운트 기능을 사용하여 주어진 문자가 텍스트에 얼마나 많이 있는지 계산하는 것이 더 빠릅니다.

정확한 성능은 구현에 따라 다르지만 문자열과 벡터는 모두 비슷하고 거의 동일합니다.