문제

std :: string size () a o (1) 작동입니까?

내가 사용하고있는 STL의 구현은 VC ++에 내장 된 것입니다.

도움이 되었습니까?

해결책

MSVC의 String :: size () 구현이 일정한 복잡성을 가지고 있는지 묻는 경우, 대답은 예입니다. 하지만 돈 웨이크 필드 C ++ 표준의 23.1에서 표 65를 언급 한 C ++ 표준은 size() 'note a'에서 말한 것을 따라야합니다. 참고 a 말한다 :

''(주 a) ''로 표시된 항목은 일정한 복잡성을 가져야합니다.

그러나 이것이 그러한 항목을 의미하지는 않습니다 ~일 것이다 일정한 복잡성이 있습니다. 표준은 매우 구체적인 용어를 사용하며 "해야한다"는 것이 필수가 아니라는 것을 의미합니다.

'Note A'는 특별히 표준에 추가되어 size() 컨테이너가 수정되었을 때 크기를 유지할 필요가 없도록 선형 복잡성을 가질 수 있어야합니다.

그래서 당신은 의존 할 수 없습니다 size() 끊임없는 복잡성이 있지만 일정하지 않은 구현이 있는지 확실하지 않습니다. string::size().

다른 팁

다음은 MSVC ++에 대한 질문에 대답하는 쉬운 방법입니다.

프로젝트에 일부 코드를 작성하십시오.

string happy;
happy.size();

.Size Call, 마우스 오른쪽 버튼을 클릭하고 정의로 이동하십시오.

내 설치 (vs2005sp1)에서 이것은 나를 Xstring : 1635로 보냅니다.

size_type __CLR_OR_THIS_CALL size() const
    {   // return length of sequence
    return (_Mysize);
    }

따라서 문자열에는 _mysize라는 멤버가있는 것처럼 보이며, 그냥 반환하는 것입니다.

다시 말해, 이것은 O (1) 구현입니다.

예, std :: string :: size ()는 O (1)입니다.

표준 23.1 절의 표 65를 참조하십시오. "a.size ()"은 "(참고 A)"로 나열되어 있으며, "그 항목은 끊임없는 복잡성을 가져야한다"고 말합니다.

섹션 21.3은 문자열이 시퀀스 (23.1)의 요구 사항을 준수한다고 말합니다.

문자열의 경우 size() 작업 가지다 사용하지 않는 모든 문자열 구현에 대해 일정합니다. 로프(1). 표준에는 작업을 요구하는 명시적인 요구 사항이 없습니다. O(1), 가장 가까운 것은 일반적인 요구 사항입니다 size() ~해야 한다 일정한 시간이지만 다른 복잡성 측정을위한 공간을 남깁니다.

~ 해야 하다 O (1)입니까?

이것은 문자열 자체의 내용에서 크기를 계산할 수 없다는 사실에서 비롯됩니다. C에서는 NUL 터미네이터를 사용하여 문자열의 끝을 결정하지만 C ++ NUL은 문자열의 다른 문자만큼 유효합니다. 문자열의 크기는 내용에서 계산할 수 없으므로(2), 문자열의 실제 크기와 독립적으로 외부 적으로 처리해야합니다.

(1) C ++ 03 표준을 사용하면 구현을 사용할 수 있습니다 로프 문자열의 구현으로서, 그러나 사실은 표준 라이브러리의 현재 구현이이를 사용하지 않는다는 것입니다.

(2) 구현이 사용 된 경우 로프가 로프를 사용하는 경우, 블록이 링크 된 목록 또는 유사한 구성을 통해 연결된 경우 로프가 구성된 블록 수를 통해 크기에 따라 또는 크기가 다른 경우. 하지만 로프 내가 알고있는 표준 라이브러리 구현에는 사용되지 않습니다.

STL은 컨테이너의 경우 적어도 O (n)이되도록 성능을 보장하지만 std :: 문자열을 포함한 많은 컨테이너는 이것을 O (1) 및 Will으로 구현할 수 있습니다. 일반적으로 간단한 변수를 반환하거나 _end -_begin과 같은 작업을 수행하고 반환합니다.

size_type __CLR_OR_THIS_CALL size() const

{   // return length of sequence

    return (_Mysize);

}

따라서 결국에는 이와 같을 수도 있지만 결코 확신 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top