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

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
    Может быть, вы спрашиваете о том, как коммутатор реализован внутри?
Показать ещё 2 комментария
Теги:
switch-statement

2 ответа

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

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

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

  • 0
    Вы всегда можете «сохранить его заранее», даже если вы switch рассчитанное значение. Просто присвойте результат вычисления временной переменной, сохраните переменную в векторе, а затем switch переменную.
  • 0
    Извините, но я не понимаю вашу точку зрения. Разве это не то, что я говорю?
Показать ещё 2 комментария
0

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

cout << value << endl;

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню