как сохранить этот вектор

#c #vector

#c #вектор

Вопрос:

Я хочу знать, как я могу определить векторные переменные, чтобы сохранить выходные данные этого кода в vector?

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

GetcloseTeammateToTeammate определяется как:

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

Ответ №1:

GetCloseTeammateToTeammate возвращает ссылку на постоянный вектор.

Просто используйте:

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

чтобы получить ссылку. Обратите внимание, что вы можете вызывать только константные функции-члены vector.

Чтобы получить копию вектора, выполните:

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

Копируйте, только если вам действительно нужно.

Ответ №2:

Должно быть, я чего-то здесь не понимаю. Разве это не просто так:

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

Комментарии:

1. Таким образом, вы просто сохраняете ссылку. Если вектор изменяется, изменяется и ваша переменная.

2. спасибо, но компилятор выдает предупреждение: неиспользуемая переменная ‘my_vector’, что мне делать?

3. @arash: Используй переменную где-нибудь! Вы получите то же предупреждение, если вы это сделаете, int i = 0; если вы затем не используете i для чего-либо.

4. спасибо, еще один простой вопрос, теперь, как я могу распечатать выходные данные этого?

5. Это зависит от того, что Unum такое. Предполагая, что вы можете распечатать Unum , вы можете выполнить итерацию как: for (i = 0; i < my_vector.size(); i ) { std::cout << my_vector[i] << "n"; } . Существуют другие, более похожие на STL, способы сделать это, но это только начало.

Ответ №3:

Там есть два разных варианта, в зависимости от того, что вы на самом деле хотите. Если вы намерены выполнить некоторую обработку данного вектора только в краткосрочной перспективе (и предполагаете однопоточное выполнение и пару других соображений), вы можете просто сохранить ссылку:

 std::vector<Unum> const amp; 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);
  

Комментарии:

1. спасибо, еще один простой вопрос, теперь, как я могу распечатать выходные данные этого?

2. Предполагая, что вы перегружены operator<<(std::ostreamamp;,Unum) , вы можете просто сделать: std::copy( copy.begin(), copy.end(), std::ostream_iterator( std::cout, " " ) ); или, альтернативно, выполнить свой собственный цикл.