Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+;中创建变量名而不创建数组+;?_C++_Arrays_Variables - Fatal编程技术网

C++ 如何在C+;中创建变量名而不创建数组+;?

C++ 如何在C+;中创建变量名而不创建数组+;?,c++,arrays,variables,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];

在创建变量然后在括号中添加变量号的地方,如何创建变量名?(顺便说一句,我只是猜测代码应该是怎样的,这样你就可以理解我想说的内容。)例如:

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];
int number=5;
int-var[number]//创建变量[5],而不是变量[4],等等。
int-var[2]//创建变量[2],而不是变量[1],等等。
cout>>var[number];
数量=2;

CIN

看起来像是需要可变长度数组,而不是C++支持的。在大多数情况下,正确的解决方案是使用

std::vector
,如中所示

int number = 42; // or whatever
std::vector<int> var(number);
int number=42;//或者别的什么
std::向量变量(数字);

你可以使用<代码> STD::vector ,因为在大多数情况下,你会使用数组,并且你会得到很多额外的功能。

看起来你想要的是可变长度数组,而不是C++支持的。在大多数情况下,正确的解决方案是使用

std::vector
,如中所示

int number = 42; // or whatever
std::vector<int> var(number);
int number=42;//或者别的什么
std::向量变量(数字);

你可以像在大多数情况下使用数组一样使用
std::vector
,你可以获得很多额外的功能。

如果我正确理解你想要什么(我不确定我是否理解),你就可以创建一个放置对象的位置,并根据一些索引号使用它们,但是只创建需要的特定对象。您之所以要这样做,要么是因为1)您不知道要创建多少个对象,要么是因为2)您不打算使用每个索引号,或者是因为3)两者都要使用

如果(1),那么您可能应该只使用一个向量,它是一个类似数组的结构,当您向其中添加更多内容时,它会自动增长。查找std::vector

如果是(2),则可以使用指针数组并最初将所有值设置为null,然后使用
new
根据需要创建对象。(也可以使用第3部分中推荐的解决方案。)


如果(3),那么您需要使用某种形式的映射或哈希表。这些结构将允许您按数字查找内容,即使并非所有数字都在使用中,并且会根据需要增长。我强烈推荐一个哈希表,但是在C++中,STL中没有一个,所以你必须在第三方库中建立自己的或找到一个。为了方便起见,可以使用std::map,它是STL的一部分。它做的基本相同,但速度较慢。一些C++分布还包括STD::HHASHMAP。如果它可用,应该改用它,因为它比std::map快。

如果我正确理解您想要什么(我不确定我是否理解),您希望能够创建一个放置对象的位置,并根据某个索引号使用它们,但只创建按需放入其中的特定对象。您之所以要这样做,要么是因为1)您不知道要创建多少个对象,要么是因为2)您不打算使用每个索引号,或者是因为3)两者都要使用

如果(1),那么您可能应该只使用一个向量,它是一个类似数组的结构,当您向其中添加更多内容时,它会自动增长。查找std::vector

如果是(2),则可以使用指针数组并最初将所有值设置为null,然后使用
new
根据需要创建对象。(也可以使用第3部分中推荐的解决方案。)


如果(3),那么您需要使用某种形式的映射或哈希表。这些结构将允许您按数字查找内容,即使并非所有数字都在使用中,并且会根据需要增长。我强烈推荐一个哈希表,但是在C++中,STL中没有一个,所以你必须在第三方库中建立自己的或找到一个。为了方便起见,可以使用std::map,它是STL的一部分。它做的基本相同,但速度较慢。一些C++分布还包括STD::HHASHMAP。如果它可用,则应改用它,因为它比std::map快。

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


示例使用

在下面的示例中,我们将值
123
绑定到整数键4,将值
321
绑定到键8。然后,我们使用
std::map::const_迭代器来迭代名为
m
std::map
中的键/值对

  #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;

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


示例使用

在下面的示例中,我们将值
123
绑定到整数键4,将值
321
绑定到键8。然后,我们使用
std::map::const_迭代器来迭代名为
m
std::map
中的键/值对

  #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;

当您不需要序列中的其他元素时,使用数组有什么意义?您想要的是什么还不清楚
int-var[5]
不会创建“
var[5]
”。C/C++使用从零开始的索引,因此它只创建一个由5个索引为0到4的整数组成的数组。另外,如果你只想要一个整数,那么不要创建数组。我不理解这个问题。为什么数组中只需要一个元素?为什么不直接使用一个变量呢?你是在寻找稀疏数组吗?你是在尝试动态创建名为var_1、var_2、var_3等的变量吗?当你不需要序列中的其他元素时,使用数组有什么意义?你想要什么还不清楚
int-var[5]
不会创建“
var[5]
”。C/C++使用从零开始的索引,因此它只创建一个由5个索引为0到4的整数组成的数组。另外,如果你只想要一个整数,那么不要创建数组。我不理解这个问题。为什么数组中只需要一个元素?为什么不只用一个变量呢?你是在寻找稀疏阵列吗