#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, " " ) );
или, альтернативно, выполнить свой собственный цикл.