如何在创建变量的位置创建变量名,然后在括号中创建变量号? (顺便说一句,我只是猜测代码应该如何,以便你得到我想说的。)例如:
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];
如果我的“示例”偏离轨道,请提出其他建议。我需要类似的东西来操作我的游戏,因为我必须能够创建一个无限的子弹实例,但它们也会在某一时刻被销毁。
答案 0 :(得分:4)
看起来您正在寻找std::map
提供的功能,123
是用于将键映射到值的容器。
使用示例
在下面的示例中,我们将值321
绑定到整数键4,将值std::map<int,int>::const_iterator
绑定到键8.然后我们使用std::map
来迭代键/值在名为m
的{{1}}中配对。
#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 :(得分:1)
看起来你想要变长数组,这不是C ++支持的。在大多数情况下,正确的解决方案是使用std::vector
,而不是
int number = 42; // or whatever
std::vector<int> var(number);
你可以使用std::vector
,就像在大多数情况下使用数组一样,你可以获得很多奖励功能。
答案 2 :(得分:0)
如果我理解你想要的东西(我不确定我做了什么),你希望能够创建一个位置来保存对象并根据一些索引号使用它们,但只能创建特定的对象根据需要进入它。你想要这样做是因为1)你不知道你要创建多少个对象,或2)你不会使用每个索引号或3)两者。
如果(1)那么你应该只使用一个向量,这是一个类似于数组的结构,当你向它添加更多东西时它会自动增长。查找std :: vector。
如果(2)那么你可以使用一个指针数组并最初将所有值设置为null,然后使用new
根据需要创建对象。 (或者您可以使用第3部分中推荐的解决方案。)
如果(3)那么你想使用某种形式的地图或哈希表。即使并非所有数字都在使用中,这些结构也可以让您按编号查找内容,并且会根据需要增长。我强烈推荐一个哈希表,但在C ++中,STL中没有一个,所以你必须自己构建或在第三方库中找到一个。为方便起见,您可以使用std :: map,它是STL的一部分。它基本上做同样的事情,但速度较慢。一些C ++发行版还包括std :: hash_map。如果它可用,那么应该使用它,因为它比std :: map更快。