Как сделать имя переменной без создания массива в C ++? - PullRequest
0 голосов
/ 11 декабря 2011

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

int var[5];
//create a variable var[5], but not var[4], var[3], var[2], etc.

Тогда к номеру переменной должен быть доступ через значение переменной:

int number = 5;
int var[number]; //creates a var[5], not a var[4], etc.
int var[2]; //creates a var[2], not a var[1], etc.
cout >>var[number];
number = 2;
cin << var[number];

Если я не в порядке с моим "примером", пожалуйста, предложите что-нибудь еще. Для работы моей игры мне нужно нечто подобное, потому что я должен иметь возможность создавать неограниченное количество пуль, но они также будут уничтожены в один момент.

Ответы [ 3 ]

4 голосов
/ 11 декабря 2011

Похоже, вы ищете функциональность, предоставляемую std::map, который является контейнером, используемым для сопоставления ключей со значениями.

Документация по std :: map


Пример использования

В следующем примере мы связываем значение 123 с целочисленной клавишей 4, а значение 321 с клавишей 8. Затем мы используемstd::map<int,int>::const_iterator для перебора пар ключ / значение в нашем std::map имени m.

  #include <map>

  ...

  std::map<int, int> m;

  m[4] = 123;
  m[8] = 321;

  for (std::map<int, int>::const_iterator cit = m.begin (); cit != m.end (); ++cit)
    std::cout << cit->first << " -> " << cit->second << std::endl;

вывод:

  4 -> 123
  8 -> 321
1 голос
/ 11 декабря 2011

Похоже, вам нужны массивы переменной длины, которые C ++ не поддерживает.В большинстве случаев правильное решение - использовать std::vector вместо этого, как в

int number = 42; // or whatever
std::vector<int> var(number);

. Вы можете использовать std::vector, как если бы вы использовали массив в большинстве случаев, и вы получаете много бонусов.функциональность.

0 голосов
/ 11 декабря 2011

Если я правильно понимаю, что вы хотите (что я не уверен, что я делаю), вы хотите иметь возможность создать место для хранения объектов и использовать их в соответствии с некоторым номером индекса, но только для создания определенных объектовкоторые идут в нем по требованию.Вы хотите сделать это либо потому, что 1) вы не знаете, сколько объектов вы собираетесь создать, либо 2) вы не собираетесь использовать каждый индекс или 3) оба.

If (1) тогда вам, вероятно, следует просто использовать вектор, который представляет собой массивоподобную структуру, которая автоматически увеличивается по мере добавления к ней большего количества объектов.Посмотрите std :: vector.

Если (2), то вы можете использовать массив указателей и изначально установить все значения в null, а затем использовать new для создания объектов по мере необходимости.(Или вы можете воспользоваться рекомендацией решения в части 3.)

Если (3), то вы хотите использовать какую-то форму карты или хэш-таблицы.Эти структуры позволят вам находить вещи по номерам, даже если не все числа используются, и будут расти по мере необходимости.Я очень рекомендую хеш-таблицу, но в C ++ ее нет в STL, поэтому вам нужно создать свою собственную или найти ее в сторонней библиотеке.Для простоты вы можете использовать std :: map, который является частью STL.Это в основном то же самое, но медленнее.Некоторые дистрибутивы C ++ также включают std :: hash_map.Если он доступен, его следует использовать вместо этого, потому что он будет быстрее, чем std :: map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...