Есть N переменных c названиями вида variable_1 .. variable_N.
Можно ли с помощью цикла во время выполнения сделать что-то с этими переменными?
for (int i = 1; i <= N; ++i)
{
variable_i = i; // например присвоить значение
}
Во время исполнения такого понятия как "имя переменной" уже не существует. Имена переменных нужны только для человека, а после компиляции у переменных есть только адреса в памяти.
Если очень хочется динамически работать с именованными значениями, то можно использовать map
:
map<string, int> var_map;
for (int i=1; i<=42; i++) {
var_map["variable_" + std::to_string(i)] = 1000+i;
}
for (int i=1; i<=var_map.size(); i++) {
cout << var_map["variable_" + std::to_string(i)];
cout << endl;
}
Но такой вариант для программиста ни чем не удобнее массива, а по производительности - хуже. Поэтому я рекомендую использовать массив.
Либо можно использовать массив в связке с enum
. Т.к. enum
сводится к обычному int
, его можно использовать для индексации по массиву. А для программиста enum
- это понятные человекочитаемые имена.
Если переменные были обьявлены глобально, могу предложить такой вариант:
int
variable_1,
variable_2,
variable_3,
variable_4,
variable_5;
struct Variable {
int& operator ()(int i)
{
switch (i) {
case 1: return variable_1;
case 2: return variable_2;
case 3: return variable_3;
case 4: return variable_4;
case 5: return variable_5;
default: throw std::range_error("...");
}
}
};
int main()
{
// ...
const int N = 5;
Variable variable_;
for (int i = 1; i <= N; ++i)
{
variable_(i) = i; // например присвоить значение
}
//...
}
int
variable_1,
variable_2,
variable_3,
variable_4,
variable_5;
int
Variable[] = { &variable_1,
&variable_2,
&variable_3,
&variable_4,
&variable_5 };
int main()
{
// ...
const int N = sizeof(Variable)/sizeof(Variable[0]);
for (int i = 1; i <= N; ++i)
{
Variable[i] = i; // например присвоить значение
}
//...
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу реализовать печать всего класса List по порядкуList реализую на шаблонах, а в них я не очень силен
При выполнении вылетает ошибка