【競プロ精進ログ】APG4b編<2-4>

zuka

ついに競技プログラミングを始めました!

本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。

目次

本記事の概要

Atcoderが公表しているc++の入門記事の内容を1からさらっていくものです。今回は2.04.参照です。

実装

#include <bits/stdc++.h>
using namespace std;

// 参照渡しを用いて、呼び出し側の変数の値を変更する
void saiten(vector<vector<int> > &A, int &correct_count, int &wrong_count) {
  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      if (A.at(i).at(j)==(i+1)*(j+1)){
        correct_count++;
      }
      else{
        A.at(i).at(j)=(i+1)*(j+1);
        wrong_count++;
      }
    }
  }
}

int main() {
  vector<vector<int>> A(9, vector<int>(9));
  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      cin >> A.at(i).at(j);
    }
  }

  int correct_count = 0;
  int wrong_count = 0;

  saiten(A, correct_count, wrong_count);

  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      cout << A.at(i).at(j);
      if (j < 8) cout << " ";
      else cout << endl;
    }
  }
  cout << correct_count << endl;
  cout << wrong_count << endl;
}

ポイント

今回おさえるべき内容

 参照を使えばある変数に別名をつけることができる

 関数は通常引数をコピーして処理を行う(値渡し)

 関数に参照された変数を渡せば無駄なコピーを防げる(参照渡し)

少しずつややこしくなってきました。参照というのは,ある変数に別名を付ける機能のことを指します。参照自体は,変数の前に&を付けることで明示的に参照を行うことができます。

参照は関数に渡す変数に対してよく利用されます。元の変数の値をコピーして一旦別物として扱う(値渡し)のか,同じ変数を指すようにする(参照渡し)のか,大きく分けて2つの方法があります。

競技プログラミングを始めたばかりの場合は,参照に関してはそこまで気にしなくても差し当たり問題ないと思います。メモリを減らしたくなってきたときに,参照を利用するべきではないでしょうか。ですので,今の所は,参照を利用する必要性が出てくるまで一旦は値渡しをしておけば良いと思います。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる