2011-04-14 8 views
0

벡터에서이 코드의 출력을 저장하기 위해 벡터 변수를 정의하는 방법을 알고 싶습니다. 내가 여기서 뭔가 빠진해야이 벡터를 저장하는 방법

const std::vector<Unum> & GetCloseTeammateToTeammate(Unum i) 
{ 
    Assert(i > 0); return GetCloseTeammateToPlayer(i); } 

답변

2

:로

/*what should be here?*/=agent.GetInfoState().GetPositionInfo().GetCloseTeammateToTeammate(2); 

GetcloseTeammateToTeammate

정의된다. 단순히이 것이 아닌가 :

const std::vector<Unum> &my_vector = agent.GetInfoState().GetPositionInfo().GetCloseTeammateToTeammate(2); 
+2

이렇게하면 참조를 저장하면됩니다. 벡터가 변경되면 변수가 변경됩니다. – codymanix

+0

@codymanix : 이것은 사실입니다. –

+0

감사하지만 컴파일러가 경고 : 사용하지 않는 변수 'my_vector'어떻게해야합니까? – Arash

5

GetCloseTeammateToTeammate은 상수 벡터에 대한 참조를 반환합니다.

는 간단하게 사용

const std::vector<Unum>& x = agent.GetInfoState().GetPositionInfo().GetCloseTeammateToTeammate(2); 

참조를 얻을 수 있습니다. 벡터의 const 멤버 함수 만 호출 할 수 있습니다.

는 수행 벡터의 사본을 얻으려면 :

std::vector<Unum> x = agent.GetInfoState().GetPositionInfo().GetCloseTeammateToTeammate(2); 

당신이 정말로 필요한 경우에만 복사합니다.

1

실제로 원하는 것에 따라 두 가지 옵션이 있습니다. 만, 단기적으로 주어진 벡터에 대한 몇 가지 처리를 할 의도 (단일 스레드 실행과 몇 가지 다른 고려 사항을 가정) 경우 당신은 단지 참조를 유지할 수 있습니다 :

std::vector<Unum> const & v = agent.GetInfoState().GetPositionInfo().GetCloseTeammateToTeammate(2); 
for (std::vector<Unum>::const_iterator it = v.begin(), end = v.end(); it != end; ++it) 
{ 
    // do something 
} 

당신이 원하는 것은 저장하는 경우 나중에 변경 사항을 확인할 수 있도록하거나 벡터를 나중에 변경하지 않고 그대로 사용할 수 있도록 벡터 사본을 만듭니다 (스레드 안전성을 수반하지 않음).

std::vector<Unum> copy = agent.GetInfoState().GetPositionInfo().GetCloseTeammateToTeammate(2); 
+0

감사합니다. 또 다른 간단한 질문입니다. 어떻게 출력 할 수 있습니까? – Arash

+0

당신이'operator << (std :: ostream &, Unum)'을 오버로드한다고 가정하면,'std :: copy (copy.begin(), copy.end(), std :: ostream_iterator (std :: cout, "")); 또는 다른 방법으로 자신 만의 루프를 굴릴 수 있습니다. –

관련 문제