2009-03-07 5 views
2

변수를 벡터 밖으로 가져 오는 방법은 무엇입니까?벡터의 변수에 액세스하려면 어떻게해야합니까? <struct> * obj?

바이너리 삽입 연산자 또는 등호 연산자를 사용할 수 없습니다.

이전, 나는 vector<someStruct> *vObj를 선언하고 할당 한 후 vObj 을 반환하고이 함수에서 호출 : 나는 그것을 디버깅 할 때

vector<sameStruct> firstFunc(); 

for (unsigned int x = 0; x < v->size(); x++) 
{ 
    v[x]; 
} 

, v[x] 지금과 같이 원래 벡터의 전체 내용을 가지고 그것은 아래 첨자/색인없이 전에했다.

그러나 나는 그 이상으로 진행하기 위해 아무 것도하지 않았다고 생각합니다.

내 벡터 안에 약 4 개의 변수가 있습니다. 디버깅 할 때 필요로하는 정보가 있지만 얻을 수는 없습니다.

답변

2

작성된 것처럼 v는 struct 벡터에 대한 포인터입니다.

v로 직접 인덱싱하면 포인터 연산입니다. v [x]는 x 위치에있는 구조체의 벡터입니다 (포인터의 끝에있는 단일 객체 인 경우 v가 배열이고 x> 0 인 경우 v [x]가 가비지라고 가정). 이는 v가 가리키는 벡터가 아니라 포인터 v 자체에 [x]를 적용하기 때문입니다.

당신은 포인터 역 참조 할 필요가 다음과 같이 사용하여 벡터에 대한 인덱스 : 당신이 벡터의 x 번째 위치에있는 객체에 대한 참조가이 시점에서

(*v)[x]; 

는 멤버 함수에서 얻을/변수는 사용

(*v)[x].variable; 

또는

(*v)[x].memberfunction(parameters); 

당신이 거라고 경우 당신이 전화했을 때와 같은

v->at(x); 
v->at(x).variable; 
v->at(x).memberfunction; 

이 방법은 정확히 같은 방식으로 객체의 멤버 함수에 액세스 :

벡터가 다음 내 요소에 액세스 역 참조 당신이 뭔가를 시도 할 수 있습니다에 오 싶지
v->size(); 

이 정보가 도움이되기를 바랍니다.

1

[] 연산자를 사용하여 요소에 액세스하려면 개체에 대한 포인터가 아니라 개체에 대해 액세스해야합니다.

시도;

(*vec)[x]; 

예 : 대신 의> 운영자 - 포인터에 함수를 호출 할 때 일반적으로 를 사용하는 것이

for (int i = 0; i < vec->size(); i++) 
{ 
    printf("Value at %d is %d\n", i, (*vec)[i]); 
} 

참고. 연산자를 사용하지만 쉽게 할 수 있습니다 (* vec) .some_func(); 대신.

[], -, ++ 등의 연산자는 객체와 포인터 모두에서 작동 할 수 있습니다. 객체의 경우 함수 호출로 작동하지만 포인터에 대해서는 주소에서 수학 연산으로 작동합니다.

예 :

pointer[nth]; 
*(pointer + nth); 

정확하게 동일한 효과를가집니다. 포인터의 처음부터 n 번째 개체를 반환합니다. . (두 번째 예에서 *의 위치를 ​​기록해, 그것은 적용된 오프셋

다른 두 가지 팁 후 를 불렀다;

또한 같은 벡터를 전달하여이 같은 역 참조 할 필요를 방지 할 수 있습니다 참조가 아닌 포인터. 항상 적절한 옵션은 아니지만 청소기 코드로 이어질 않습니다.

void my_func(std::vector<int>& vector) 
{ 
    // vector can then be used as a regular variable 
} 

당신은 당신이 타입 정의를 사용할 수있는 기능에 많은 특정 유형의 벡터를 통과 할 거라면 둘 다 명확하게 입력하고 타이핑 할 때 절약하십시오.

typedef std::vector<int> IntVector; 

void my_func(IntVector& vector) 
{ 
} 
관련 문제