2014-09-09 2 views
0

Как я могу отслеживать порядок, в котором выполнены операторы case switch?Как отслеживать порядок, в котором выполняются значения кода коммутатора?

Например:

while (some_boundary) {  
    switch (value) { 
     case a: 
      do something; 
      move to next value; 
      break; 
     case b: 
      do something; 
      move to next value; 
      break; 
     case c: 
      do something; 
      move to next value; 
      break; 
    } 
} 

Я хочу знать, если switch был выполнен abc или bac или cab и т.д.

Любая идея? Или реализовать через if/else больше смысла?

+1

Я не уверен, что вы имеете в виду здесь. * значение * будет соответствовать только одному элементу переключателя. –

+0

Возможно, вы спрашиваете о том, как коммутатор реализован внутри? –

+1

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

ответ

1

Вы можете сохранить вектор на каждой итерации со значением соответствующей итерации:

std::vector<int> sequence; 
while (some_boundary) { 
    int temp = computeValue(); // Or however you get your value. 
    sequence.push_back(temp); 
    switch (temp) { 
    case a: 
     //do something; 
     break; 
    case b: 
     //do something; 
     break; 
    case c: 
     //do something; 
    break; 
    } 
} 

Edit: Это предполагает, что значение устанавливается где-то между время и коммутатором, так что вы можете сохранить его в авансовый. Другим вариантом является включение команды push_back в каждом случае, но более «грязный». Предварительное выделение вектора также может сэкономить некоторое время вычисления.

Редактирование 2: код, измененный в соответствии с предложениями, чтобы обеспечить вычисление нового значения.

+0

Вы всегда можете «сохранить его заранее», даже если вы «переключаетесь» на вычисленное значение. Просто присвойте результат вычисления переменной temp, сохраните переменную в векторе, а затем «переключите» на переменную. –

+0

Прошу прощения, но я не понимаю. Разве это не то, что я говорю? –

+0

«switch» должен иметь конкретное значение для оценки, будь то «switch (variable)» или «switch (expression)». В первом случае вы будете делать push_back (переменная); переключатель (переменная) '. Во втором случае вы будете делать 'int temp = expression; push_back (температура); switch (temp) 'вместо этого. Поэтому вы всегда можете гарантировать, что «значение установлено где-то между временем и переключателем, поэтому вы можете сохранить его заранее», нет необходимости в предположении. Я не критикую код в вашем ответе, я критикую формулировку вашего «Редактировать». –

0

Если вы просто хотите знать (и не сохранять результаты), вы можете просто вывести значение на каждой итерации. Попробуйте

cout << value << endl; 

как первая строка внутри цикла while.