如何在不使用C ++创建数组的情况下创建变量名?

时间:2011-12-11 04:07:56

标签: c++ arrays variables

如何在创建变量的位置创建变量名,然后在括号中创建变量号? (顺便说一句,我只是猜测代码应该如何,以便你得到我想说的。)例如:

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 个答案:

答案 0 :(得分:4)

看起来您正在寻找std::map提供的功能,123是用于将键映射到值的容器。

Documentation of std::map


使用示例

在下面的示例中,我们将值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更快。