我很想知道每次执行循环时是否有办法用新名称创建一个新变量。
例如:
#include <iostream>
int main()
{
for (int x = 1 ; x<=5 ; x++)
int a_x;
return 0;
}
应创建5个新变量,名称为a_1,a_2 ...... a_5
上面的代码只显示了我要找的内容,不答案。
编辑: 在不使用数组的情况下寻找出路。
- 有学习意愿的C ++新手:)
答案 0 :(得分:3)
不,你不能用C ++做到这一点。
在这种情况下,最好的办法是创建int
的数组并使用for
循环填充它们。
int a_x[5];
for (int x = 1 ; x<=5 ; x++)
a_x[x - 1] = /*ToDo - something*/
请注意
数组从零开始:你能看到我如何使用x - 1
。正常的做法是在x
循环中重新定义for
:for (int x = 0 ; x < 5; ...
数组未已初始化。您必须填充内容。
答案 1 :(得分:3)
不,没有办法做你已经概述的(直接)。以下是几种可能的替代方案:
首先,如果您不需要在循环外部访问“变量”,只需使用正常的局部变量:
for (int x = 1; x <= 5; ++x) {
int a = whatever; // This will be freshly redeclared & reinitialised in each iteration
}
如果在编译时已知迭代的边界,则可以使用数组:
std::array<int, 5> a;
for (int x = 0; x < a.size(); ++x) {
a[x];
}
如果仅在运行时知道边界,请使用动态数组:
std::vector<int> a(the_runtime_size);
for (int x = 0; x < a.size(); ++x) {
a[x];
}
如果由于某种原因确实需要单个变量(并且您知道编译时的数字),则可以使用Boost.Preprocessor的预处理器技巧。但那是远高于初学者水平:
#include <boost/preprocessor>
#define DECLARE_MY_VARIABLE(z, idx, name) \
int BOOST_PP_CAT(name, BOOST_PP_CAT(_, idx));
BOOST_PP_REPEAT(5, DECLARE_MY_VARIABLE, a)
上面的代码将扩展为:
int a_0; int a_1; int a_2; int a_3; int a_4;
您当然可以进一步采取这几个步骤,让每个变量具有不同的类型,或者通过名称而不是索引来命名。它只需要更多的宏魔法。
免责声明:除非您非常清楚地知道自己需要,否则不要使用此方法。即便如此,在实际执行此操作之前,请重新考虑两次。如果你仍然这样做,请大量记录。像这样的东西一般应隐藏在一个漂亮的&amp;干净的用户友好界面。
答案 2 :(得分:1)
虽然许多人会认为这是不可能的,但可以通过预处理器来实现。循环计数必须在编译时知道。在这里,我使用Boost预处理器库。 PP_REPEAT的示例几乎完全符合您的要求。
#include <boost/preprocessor/repetition/repeat.hpp>
#define DECL(z, n, text) text ## n = n;
int main()
{
BOOST_PP_REPEAT(5, DECL, int a_) // expands to int a_0 = 0; int a_1 = 1; ...
return 0;
}
请记住:肯定不是你想要的。您可能想要使用数组。如果你绝对确定你需要它,请只使用它。