2014-02-01 3 views
-2

Мне интересно, есть ли способ динамически назвать переменные - точнее; Есть ли способ инициализировать переменные for-loops таким образом, что каждый раз, когда цикл выполняет часть имени, изменяется? Например: создание 10 переменных с именами row1, row2, row3, row4 [...] row10 - где «строка» остается неизменной, но число в конце изменяется.Динамические имена при инициализации переменных в C++

Зачем мне нужно знать: я пытаюсь развернуть голову вокруг двумерных векторов и столкнулся с проблемой; каждый строка моей векторной матрицы - это вектор с именем «строка», и поэтому невозможно проверить длину строк, используя метод .size (например, с столбцами), поскольку у них нет уникальных имен ,

//Creation of vector 
vector <vector <int> > multiVector;  
for (int i = 0; i < 5; i++) { //Vector is given 5 rows 
     vector <int> rad (7); 
     multiVector.push_back(rad); //The newly declared vector is filled with rows 
    } 

//Vector is printed 
    for (int i = 0; i < multiVector.size(); i++) { 
     for (int j = 0; j < 7; j++) { 
      cout << multiVector[i][j] << " "; 
     } 
     cout << endl; 
    } 

Благодарим за помощь!

+1

Имена переменных являются статическими компонентами языка. Вы не можете создавать их динамически, но вы можете взломать это, используя 'unordered_map '. Вроде как динамические языки делают внутри. – pmr

ответ

4

Вы можете получить размер i-й строки, обратившись к этой строке, а затем набрав size: multiVector[i].size().

И нет, вы не можете динамически генерировать имена переменных. Имена переменных существуют только в исходном коде и во время компиляции, чтобы помочь программисту и компилятору определить разные переменные. Они не существуют во время выполнения, поэтому не могут быть созданы во время работы программы. Если вы считаете, что вам нужны переменные с увеличением числа после их имен, то то, что вы действительно хотите, это массив.

+1

Я думаю, что есть множество случаев, когда динамические переменные полезны (например, разбор JSON), но они не очень C++ y. – pmr

+0

О, конечно! Я не знаю, почему я не думал об этом * facepalm *, но спасибо! –

Смежные вопросы