2015-01-08 2 views
0

은 내가이 사용자 정의 클래스맞춤 클래스가있는 벡터가 NULL인지 어떻게 확인할 수 있습니까?

#ifndef VEHICLE_H_ 
#define VEHICLE_H_ 

Class Vehicle { 
public: 
Vehicle(); 
Vehicle(char,char,int,int); 
virtual ~Vehicle(); 
char getLicense_plate(); 
void setLicense_plate(char); 
char getBrand(); 
void setBrand(char); 
int getTime_in(); 
void setTime_in(int); 
int getTime_out(); 
void setTime_out(int); 

char license_plate; 
char brand; 
int timei; 
int timeo; 
}; 

만든 그리고 나는 MAIN.CPP의 크기 (50)와 차량 벡터를 만든하지만이 비어있는 경우 I는 각각의 값을 확인하지 않는 방법에 대해 설명합니다.

#inlcude<iostream> 
#include<vector> 
#include<algorithm> 
#inlude "Vehicle.h" 
using namespace std; 

int main() 
{ 
vector<Vehicle> avai_space(50); 
for(int i=0;i<avai_space.size();i++) 
{ 
    //if(avai_space(i) == NULL??){} 
+2

그들은 "비어 있지 않습니다"- 벡터는 기본 생성자에 의해 생성 된 50 개의 'Vehicle'을 포함합니다. (C++은 Java가 아닙니다.) – molbdnilo

+1

null이 될 수 없으며 포인터가 아닙니다. 이 벡터에는 50 개의 기본 구성된 Vehicle이 있습니다. – Borgleader

+0

왜 당신은 수업을 자본화 했습니까? – drescherjm

답변

1

vector<Vehicle> avai_space(50); (50)의 용량을 가진 빈 벡터를 생성하지 않습니다; 각 입력이 Vehicle 클래스의 기본 생성자를 사용하여 초기화되는 50 개의 유효한 항목이있는 벡터를 만듭니다.

사용, 50의 최대 스토리지 빈 벡터를 만들려면 : 당신은 저장에 영향을주지 않고 벡터에 항목을 추가 할 vehicle_vec.push_back()을 사용할 수 있습니다

vector<Vehicle> vehicle_vec; 
vehicle_vec.reserve(50); 

. 벡터가 항목으로 채워지면

, 당신은 지금이 벡터에 유효한 항목을 반복하는 vehicle_vec.size()를 사용할 수 있습니다

for (size_t i = 0 ; i < vehicle_vec.size() ; i++) { 
    // Use vehicle_vec[i], for e.g. 
    std::cout << vehicle_vec[i].brand << "\n"; 
} 
+0

그래, 내가 포인트를 가지고 있지만 벡터를 만든 후 (부호없는 int i = 0; i user4433128

+0

차량에 size() 멤버가 없으며 크기를 NULL과 비교하면 많은 의미가 없습니다. – drescherjm

+0

@ user4433128 벡터의 특정 요소가 유효한지 확인할 수 없습니다.당신이 할 수있는 것은 얼마나 많은 원소가 유효한지를보고 유효한 원소들 사이에서만 반복하는 것입니다 – nav

1

포인터가 아닌 값으로 저장되기 때문에 null 포인터와 마찬가지로 요소가 '비어있을'수 없습니다. 포인터가 객체

std::vector<std::unique_ptr<Vehicle>> 
을 소유해야하는 경우

그 시나리오는,

std::vector<Vehicle*> 

같은 선언에 해당하거나 것

+2

'boost :: optional'이 더 좋을 것입니다. 동적 할당은 필요 없습니다. 아무 이유없이 메모리 할당량을 크게 늘리고 할당량을 늘릴 수 있습니다. –

+0

@LightnessRacesinOrbit 좋은 지적입니다. 나는 방공호의 포인터 중심의 추론 라인을 따르고 그의 예제에서 왜 null이 없는지 명확히하려고 노력했다. – bogdan

1

vector<Vehicle> avai_space(50); 50 Vehicles을 만듭니다. 그것들은이 줄 뒤에 존재하며 비어 있지 않지만, 무엇이 Vehicle의 기본 생성자가 그것들을 만듭니다.

당신이 당신의 벡터에 Vehicles를 저장하지만, 아직을 만들려면

, 그냥 vector<Vehicle> avai_space;를 작성하고 다음 std::vector::push_back과 끝에 새 Vehicles의 추가 (나는 당신이 == NULL으로 무엇을 의미하는지의 가정).

관련 문제