Как мне переписать этот код, используя циклы for на основе диапазона? - PullRequest
0 голосов
/ 16 мая 2019

Я новичок в C ++, и теперь я познакомился с C ++ 11. Я нахожу синтаксис очень разным, и мне нужна помощь в переписывании следующего кода.

#include <iostream>
#include <vector>
using namespace std;

int main()
{ 
  vector<vector<int> > magic_square ={{1, 14, 4, 15}, {8, 11, 5, 10}, 
{13, 2, 16, 3}, {12, 7, 9, 6}};
  for(inti=0; i<magic_square.size(); i++)
 {
   int sum(0); 
   for(intj=0; j<magic_square[i].size(); j++)
        sum += magic_square[i][j];
   if(sum!=34)
        return-1;
}
   cout << "Square is magic" << endl;
   return0;
}

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Вы можете полностью исключить внутренний цикл, используя std::accumulate, и просто сделать так, чтобы внешний цикл основывался на диапазоне:

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

int main()
{ 
   std::vector<std::vector<int>> magic_square = {{1, 14, 4, 15}, {8, 11, 5, 10}, {13, 2, 16, 3}, {12, 7, 9, 6}};
   for (auto& v : magic_square)
   {
      if ( std::accumulate(v.begin(), v.end(), 0) != 34 )
        return-1;
   }
   std::cout << "Square is magic\n";
   return 0;
}

Пример в реальном времени

0 голосов
/ 16 мая 2019

Вот и все:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
  static constexpr auto SUM= 34;
  vector<vector<int>> magic_square= {
    { 1, 14,  4, 15},
    { 8, 11,  5, 10}, 
    {13,  2, 16,  3},
    {12,  7,  9,  6}
  };

  for (const auto& row: magic_square) { // auto not to type the type, 
                                        // const because you do read only and &
                                        // to use reference and avoid copying
    auto sum= 0; // Auto with integer defaults to int
    for(const auto& number: row) { // Now for every number on the row
        sum+= number;
    }
    if (sum != SUM) {
        return 1;
    }
  }
  cout << "Square is magic" << endl;
  return 0;
}

Вы можете запустить его в: https://ideone.com/JQ346v

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...