у меня есть вектор, я могу пробежаться по нему через for() и if()
vector<int> vec{1,2,3,4,5};
for(auto i=0;i<vec.size();i++)
{
if(vec[i] == 1)
//do smth...
if(vec[i] == 2)
//do smth...
if(vec[i] == 3)
//do smth...
if(vec[i] == 4)
//do smth...
if(vec[i] == 5)
//do smth...
}
как мне переделать это через конструкцию switch case?
for(int i(0);i<vec.size();i++)
{
switch(vec[i])
{
case 1:
//do smth...
break;
case 2:
//do smth...
break;
// etc
default:
//do smth...
break;
}
}
Учитывая, что в общем случае в do smth
может присутствовать модификация элементов вектора, а также что каждый последующий if
при отсутствии в do smth
команд типа break
, return
, continue
... будет требовать проверки, эквивалентный код со switch
будет достаточно странным (и всё равно содержать if
):
for (size_t i = 0; i < vec.size(); i++)
{
int visited = 0;
again:
switch(vec[i]) {
case 1: if (visited >= 1) break; visited = 1; /* do smth... */ goto again;
case 2: if (visited >= 2) break; visited = 2; /* do smth... */ goto again;
case 3: if (visited >= 3) break; visited = 3; /* do smth... */ goto again;
case 4: if (visited >= 4) break; visited = 4; /* do smth... */ goto again;
case 5: if (visited >= 5) break; visited = 5; /* do smth... */ goto again;
}
}
Можно подсунуть сюда макрос:
#define v(i) if (visited >= i) break; visited = i
Но это всё равно будет выглядеть не менее странно:
for (size_t i = 0; i < vec.size(); i++)
{
int visited = 0;
again:
switch(vec[i]) {
case 1: v(i); /* do smth... */ goto again;
case 2: v(i); /* do smth... */ goto again;
case 3: v(i); /* do smth... */ goto again;
case 4: v(i); /* do smth... */ goto again;
case 5: v(i); /* do smth... */ goto again;
}
}
P.S. заодно, я заменил int
на size_t
, т.к. размер вектора всё-таки имеет беззнаковый тип.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть у меня текстура в формате TGAЗная Х и У как я могу получить цвет пикселя? Какие библиотеки для этого подключить или скачать?
Если, когда курсор находится в позиции 0,0 нажать влево или вверх (те
Нужно сделать функцию, которая будет принимать от пользователя его вариант, а также другую функцию, которая будет определять, соответствует...
В методе insert класса Vector нужно передать итератор указывающий на позицию в которую ты хочешь поместить элемент, я правильно понимаю что для...