Могу ли я сделать перечисление переменных в if statemants? - PullRequest
2 голосов
/ 04 августа 2020

Я пытаюсь изучить C ++ (Начинающий). Но мне интересно, как я могу перечислить переменные в таких операторах, как if.

Мне просто поставить запятую между переменными? Каков правильный синтаксис для этого .. или все это хорошо?

#include <iostream>
using namespace std;

int main()
{
   int a, b, c, d, e;
   cin >> a >> b >> c >> d >> e;
   if (a, b, c > e && a, b, c > d) 
   {
      cout << a + b + c;
   }
}

Ответы [ 3 ]

4 голосов
/ 04 августа 2020

Нет, в C ++ нет ничего подобного. Вам нужно будет разделить каждый из них на отдельный оператор, например:

if (a > e && b > e && c > e && a > d && b > d && c > d){

Однако logi c здесь можно упростить.

Если вы хотите a > e И a > d, тогда вам нужно только показать, что a больше, чем большее из e и d. Обратное верно для a, b и c. Другими словами, вам нужно только проверить, что наименьшее из a / b / c больше наибольшего из e / d.

Таким образом, это может быть:

if (min({a, b, c}) > max(e, d)){
3 голосов
/ 04 августа 2020

Вы не можете делать то, что пробовали там, в коде.

Очевидный способ (для начинающих) был показан в ответе @ scohe001. Однако, когда вы узнаете в какой-то момент шаблоны и складные выражения , следующее решение будет очень компактным и похожим на то, что вы пытались сделать.

#include <iostream>
#include <utility>

template<typename... Args>
constexpr bool all_of_greater(const int lhs, Args&&... rhsArgs)
{
   return ((lhs < std::forward<Args>(rhsArgs)) && ...);
}

Теперь вы можете сделать то же самое, что и в коде:

if (all_of_greater(e, a, b, c) && all_of_greater(d, a, b, c))
{
   std::cout << a + b + c;
}

( См. Онлайн-демонстрацию )

2 голосов
/ 04 августа 2020

Вот переработанный подход, при котором «значения» и «цели» разделены на две отдельные vector структуры для облегчения сравнения:

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

// Helper function to read an arbitrary number of entries into a vector
void read_n(std::vector<int>& list, const size_t n) {
  for (size_t i = 0; i < n; ++i) {
    int v;
    std::cin >> v;
    list.push_back(v);
  }
}

int main() {
  // Container to hold the values
  std::vector<int> values;

  read_n(values, 3);

  // Container to hold the targets
  std::vector<int> targets;

  read_n(targets, 2);

  // Ensure that for each target...
  for (auto target : targets) {
    // ...all of the values exceed that target...
    if (!std::all_of(values.cbegin(), values.cend(), [target](int i) { return i > target; })) {
      // ...or else it's a fail.
      return -1;
    }
  }

  // Use accumulate to compute the sum and display it.
  std::cout << std::accumulate(values.cbegin(), values.cend(), 0) << std::endl;

  return 0;
}

При написании кода попробуйте мыслить в терминах структура и циклы , а не просто копирование-вставка кода для добавления дополнительных переменных.

...