2012-05-27 2 views
0

나는 벡터가 있으며 최대 10 개의 개체를 보유 할 예정입니다. 벡터를 만들면 클래스의 10 개의 "빈"객체가 생성됩니다. 따라서 내 코드는 벡터 요소가 null이고 분명히 null이 아닌지 확인해야하기 때문에 문제가 발생합니다.벡터에 요소가 있는지 확인

벡터 객체에 삽입 한 요소가 포함되어 있는지 또는 초기화시 기본 생성자 "빈"객체 중 하나가 포함되어 있는지 어떻게 확인할 수 있습니까?

이 기술이 있습니까? null 일 수 없습니다 클래스의

+0

"blank"객체를 포함하고 있는지 여부 (실제로는 기본으로 생성 된 인스턴스)는'resize (10)'또는'reserve (10)'중 무엇을 사용했는지에 따라 다릅니다. –

답변

1

인스턴스

(I 재귀 알고리즘과 종료 지점, 벡터의 객체가 null의 경우 재귀 함수가 리턴입니다 쓰고 있어요 때문에 나는 널 (null)를 확인하기 위해 필요) . 포인터 만.

그러나 사용할 수있는 크기()가 있습니다.

typedef stdd::vector<SomeClass> vec; 
//define some vec, v 
for (vec::size_type i = 0, s = vec.size(); i < s; ++i) { 
    //do something with v[i] 
} 

재귀 함수를 사용하면 최대 색인을 전달하여이 아이디어를 사용할 수 있습니다.

void recursiveFunc(vec& v, vec::size_type s); 

그런 다음 재발 상태를 점검 할 때 "나는 벡터 끝에 있습니까?" 제대로 (그리고 현재 상황에서 가능한 경우),이 기본 데이터의 인식되지 않도록 조작을 분리 할 수 ​​있다면 저장되는

template <typename Iterator> 
void recursiveFunc(Iterator begin, const Iterator& end); 

: 대신 인덱스 작업의

또는, 당신은 반복자를 사용할 수 있습니다 벡터에서.

루프

은 다음과 같을 것이다 벡터를 통해 이동 : @Corbin가 언급 한 바와 같이

while (begin != end) { 
    //do something with *begin 
    ++begin; 
} 
+0

초기 블록 크기가 10 인 벡터를 만든 경우 벡터에 아무 것도 삽입하지 않으면 크기가 0이됩니까? (그리고 나는 수용력 10을 추정한다) – user997112

+0

@ user997112 : 예. 그리고 연속적이어야합니다. –

+0

@Corbin : 그렇지 않습니다.'vector'는 할당 된 사용되지 않은 공간에 기본 생성 된 항목을 삽입하지 않습니다. 일반적으로 원시 메모리를 할당 한 다음 필요한 경우 해당 메모리에 항목을 생성하기 위해 새로운 배치를 사용하지만 아무 것도 삽입하지 않은 메모리는 객체가 아닌 원시 메모리입니다. –

0

, 크기는() 벡터의 요소 수를 반환합니다. 그 사이에 아무런 구멍도 없어 (연속적으로) 보장되므로 vector [vector.size()]가 비어 있음을 확신 할 수 있습니다.

+0

그것만 큼, 나는 단지 전체 벡터가 비어 있고 비 실제 객체로 가득 차 있는지를 알기를 원한다. – user997112

1

std::vector은 "실제"개체 만 삽입합니다. (적어도 정상적으로) 원시 메모리를 할당하고 필요에 따라 해당 메모리에 객체를 생성하기 위해 새로운 배치를 사용합니다. 그것이 포함 할 수있는 유일한 객체는 당신이 거기에 놓은 것입니다.

물론 을 입력하면을 원하는 경우 생성자에 전달하는 개체의 복사본이 포함 된 벡터를 만들 수 있습니다. 마찬가지로, 벡터가 resize 일 때 벡터를 크게 만들면 새로운 위치에 복사 할 객체를 전달합니다.

어느 쪽도 실제로는 표준이 아닙니다. 일반적으로 vector을 만들면 0 개의 개체가 포함되어 시작됩니다. 을 사용하여 vector에 개체를 추가합니다. vector을 검색 할 때 거기에있는 객체는 push_back과 함께 표시되며 다른 객체가 포함될 가능성은 걱정할 필요가 없습니다.

그냥 vector가 비어 있는지 여부를 확인하려면

, 당신은 사용할 수 있습니다

if (your_vector.empty()) 
비어 있다면 (분명히 충분히) true를 반환합니다

... 및 false가 적어도 포함되어있는 경우 하나의 개체.

관련 문제