2011-11-07 4 views
0

좋아, 여기에 C에서 한 줄 ++누군가이 라인을 설명해 주시겠습니까?

typedef vector<double>::size_type vec_sz; 

이해는이 줄 vec_sz라는 별칭을 생성하는,이다. 하지만 왜 벡터가 여기에 사용되는지 이해할 수 없습니까? typedef와 vector를 가진 장군은 무엇인가. 나는이 밤을 찾아 보려고 노력하지만, 나는 아직도 이해하지 못합니다.

+0

나중에 'vec_sz count;'변수를 선언하고 벡터에 의해 반환 된 크기를 에 저장할 수 있습니다. 아마 일종의 정수 일 겁니다. 이 코드를 작성한 사람은 전체 형식 선언 대신 shortform vec_sz를 사용하는 것이 좋을 것입니다. 유형이 미래에 변경되면 한 곳에서 typedef를 변경하는 것이 형식 전체를 변경하는 방법이라고 생각할 것입니다 코드베이스. –

답변

2

vec_sz은 이제 vector (거의 항상 size_t)의 크기를 나타내는 데 사용되는 데이터 형식의 별칭입니다. 그래서 다음과 같이, 당신은 vec_sz를 사용하려는 벡터의 인덱스 요소를 가정 :

합니다 ( typedef 덕분에) 지금과 동일
for(vector<double>::size_type i = 0; i < some_vector.size(); ++i) 
{ 
... 
} 

:

for(vec_sz i = 0; i < some_vector.size(); ++i) 
{ 
... 
} 

당신은 궁금 할 것이다 " vec_sz을 사용하는 이유는 무엇입니까? 그냥 int을 사용해야하는 이유는 무엇입니까? " 글쎄, 이것은 당신의 코드를 더 이식성있게 만든다. 그리고 당신의 가정에 의존하는 경향이 적다.

물론 벡터의 요소에 iterators을 통해 액세스하는 것이 좋습니다.

0

크기를 저장하기 위해 std :: vector 클래스에서 사용되는 유형입니다. 많은 플랫폼과 OS에서는 이것이 다를 수 있으며이 유형을 사용하면 크기를 올바르게 읽을 수 있습니다.

예를 들어, 크기 유형으로 int를 사용할 수 있습니다. 그러나 벡터의 크기 유형이 부호없는 int 인 경우 벡터가 최대 부호있는 int 크기를 초과하면 이상한 결과가 발생할 수 있습니다.

추가 정보는 http://en.wikipedia.org/wiki/C_data_types 에서 찾을 수 있습니다. 알 수 있듯이 int는 운영 체제마다 다를 수있는 최소 16 바이트 이상을 가질 수 있습니다.

1

각 벡터 클래스 (귀하의 경우 벡터)는 size_type이라는 부호없는 정수 유형을 정의합니다. 이런 식으로 뭔가 :

template<class T> vector { 
    typedef size_t size_type; 
    ... 
} 
2

클래스는 그들의 내부 형식 정의를 가질 수는 :

class foo { 
public: 
    typedef int bar; 
} 

foo::bar my_int; // same as int my_int; 

벡터는 입력의 많은입니다

vector<double>::size_type my_int; // roughly the same as size_t my_int 
            // implementation may not use size_t 

를 size_t로에 해당하는 형식 정의를 가지고 있으며, 그래서 당신은 할 수 줄을 더 짧게하기 위해 다시 typedef :

typedef vector<double>::size_type vec_sz; 
vec_sz my_int; // same as vector<double>::size_type my_int; which is the same as size_t my_int; 
0

size_type구성원 typedefstd::vector<double>입니다.

namespace std { 
    template <typename T> class vector { 
    public: 
     typedef __something size_type; 
     size_type size() const; 
    // ... 
    }; 
} 

표준은 vector<T>::size()의 리턴 타입이 구현 unsigned int의 최대 값으로 표현 될 수있는 것보다 벡터의 이상의 요소들을 지원할 수있는 경우에, unsigned int이다 "와 같은 것을 지정 피할 수있다. 대신에, 몇몇 구현 지정 정의 된 멤버 유형이므로 라이브러리는 어떤 유형이든 가장 적합하게 사용할 수 있으며 사용자 코드는 해당 유형을 쉽게 사용할 수 있습니다.

또한 vector<double>::size_typevector<char>::size_type은 다를 수 있습니다 (일반적으로 같지만).

따옴표로 묶인 코드는 "double을 포함하는 벡터의 요소 수에 사용되는 C++ 라이브러리의 유형에 대해 다른 typedef를 vec_sz"으로 지정합니다.

관련 문제