#c #arrays #sorting #compare #operators
#c #массивы #сортировка #Сравнить #операторы
Вопрос:
Я пытаюсь создать калькулятор на c с использованием классов, и я столкнулся с этой проблемой. вот код: (сейчас это не проблема, но я вижу, что она станет проблемой в будущем)
char opcheck;
char opDisp[6] = { ' ', '-', '*', '/', 'p', 'r' };
while (opcheck==opDisp[0] || opcheck==opDisp[1] || opcheck==opDisp[2] || opcheck==opDisp[2] || opcheck==opDisp[4] || opcheck==opDisp[5]);
Итак, моя проблема связана с этим оператором while; как я могу сравнить переменную opcheck с каждым элементом массива opDisp, НЕ вводя «opcheck==opDisp [n]» для каждого элемента?
Есть ли в C вообще какая-либо встроенная функция массива, например «if(opcheck==opDisp[от 1 до 5 с оператором OR каждый раз])»?
Комментарии:
1. Сделайте это структурой и определите
operator=
элемент.
Ответ №1:
Вы можете использовать any_of
стандартные алгоритмы начиная с C 11:
if (std::any_of(std::cbegin(opDisp), std::cend(opDisp), [=](char x) { return x == opcheck; })) {
...
}
Или в C 20 с std::ranges
:
if (std::ranges::any_of(opDisp, [=](auto x) { return x == opcheck; })) {
...
}
Ответ №2:
Вы можете использовать std::find
while (std::find(std::begin(opDisp), std::end(opDisp), opcheck) != std::end(opDisp))
Комментарии:
1. Но почему он проверяет, не равно ли значение, которое я нашел с помощью std::find, концу массива? Я не совсем знаком с этим…
2.
std::find
возвращает итератор первого найденного элемента или конец, если не найден.
Ответ №3:
Вы не спрашивали (об эффективности), но ОБЯЗАТЕЛЬНО ли использовать массив? Любой поиск в массиве будет иметь линейную сложность. Если вы сохраняете свои операторы в unordered_set
(хэш-таблице), поиск будет иметь постоянную сложность, и то же std::find
самое будет работать, только быстрее.
Комментарии:
1. Итак, рекомендуется ли всегда использовать неупорядоченный набор, когда вам не нужно, чтобы значения внутри контейнера располагались в определенном порядке?
2. @SorenTheOutcast Вы используете упорядоченные коллекции, если вас интересует порядок их элементов, и неупорядоченные — если вы этого не делаете. Это относится и к
map
andunordered_map
.