2010-07-23 7 views

답변

2

sizeempty은 벡터에 대해 일정한 시간입니다. 대부분의 경우 (비어 있지 않은 벡터), 첫 번째 것은 작고 일정한 양의 작업을 추가합니다. 두 번째는 분명히 깨끗하며 아마도 평균적으로 훨씬 효율적입니다.

1

벡터 :: 크기는 O (1) 복잡성이 필요합니다. 따라서 합리적인 구현을 위해 VECTORS에서는 empty()에 대한 호출을 건너 뛸 수 있습니다.

다음과 같이 보일 것 벡터의 합리적인 구현 :

성능을 요구하기 때문에
class vector { 
    private: 
     size_t m_size; 

    public: 
     size_t size() { 
      return m_size; 
     } 

     bool empty() { 
      return m_size == 0; 
     } 
}; 
+1

언급 규칙이'벡터 : 크기()'에 대한 복잡성 요구 사항은 없습니다 있다는 제로

에 대해 크기를() 비교보다 빠릅니다 빈, 맞다. 단지 일정한 복잡성을 가져야한다는 권고가 있습니다 (그리고 계속해서 복잡성을 갖지 않는'vector'의 합리적인 구현을 상상할 수 없습니다). C++ 0x가 게시되면 'size()'는 일정한 복잡성을 가져야합니다. –

0

, 왜 루프의 방법 크기를 호출해야합니까? 루프가 시작되기 전에 값을 가져 오지 않는 이유는 무엇입니까?

size_t size = myvector.size();

질문에 대해서는 다른 사람들이 이미 대답했습니다.

0
i < myVector.size(); 

빈 벡터에서 실행하기 전에 루프가 종료됩니다. 더 많은 것은 중복됩니다.

0

당신은() 유효 STL

+1

Meyers는 "모든 표준 컨테이너에 대해 비어있는 시간은 일정한 작업이지만 일부 목록 구현에서는 크기가 선형 시간이 걸릴 수 있습니다."라고 말하면서 사실입니다. 그러나 이것은 둘 다 일정 시간 인'vector'에 적용되지 않습니다. 분명히,'list'를 위해'size'를 반복적으로 호출하는 것은 나쁜 생각 일 것입니다. –

관련 문제