【競プロ精進ログ】APG4b編<1-15>

zuka

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

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

目次

本記事の概要

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

実装

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

// vectorを受け取ってその要素和を出力する関数を定義
int sum(vector<int> scores) {
  int ans = 0;
  rep(j, scores.size()){
    ans += scores[j];
  }
  return ans;
}

// 標準出力をする関数を定義
void output(int sum_a, int sum_b, int sum_c) {
  cout << sum_a * sum_b * sum_c << endl;
}

// 標準入力をする関数を定義
vector<int> input(int N) {
  vector<int> vec(N);
  for (int i = 0; i < N; i++) {
    cin >> vec.at(i);
  }
  return vec;
}

// あとは関数を利用するだけ
int main() {
  int N;
  cin >> N;
  vector<int> A = input(N);
  vector<int> B = input(N);
  vector<int> C = input(N);
  int sum_A = sum(A);
  int sum_B = sum(B);
  int sum_C = sum(C);
  output(sum_A, sum_B, sum_C);
}

ポイント

今回おさえるべき内容

 関数の定義にはお作法がある

 returnを忘れると何が返ってくるか分からない

 main関数は特別扱いでreturnを忘れたら0を返す

関数の定義は以下のようにして行われます。

返り値の型 関数名(引数1, 引数2, ...){
  処理
  return
}

例えば,vector型の配列の要素和は以下のような関数を定義することで簡単にいつでも呼び出すことができます。

// vectorを受け取ってその要素和を出力する関数を定義
int sum(vector<int> scores) {
  int ans = 0;
  rep(j, scores.size()){
    ans += scores[j];
  }
  return ans;
}

返り値の種類はint型,関数名はsum,引数はint型の要素をもつvector型の変数scoresです。実際に返り値の種類が合うように最後にreturnansを返しています。

そして,今まで漠然と書いてきたmainってやつですが,こいつも実は関数の一種です。簡単には,プログラムを実行するとmain関数が実行されると覚えておくと良いと思います。通常はreturnを忘れると,その関数からは何が返ってくるかは分からないのですが,main関数は特別で,int main()と指定していてint型のreturnを忘れたとしても,0が返ってくるようになっています。

この仕組みがあるので,競技プログラミングにおける多くの解答例ではmain関数のreturn 0;を省略しています。本サイトでも同様です。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

※ Please enter your comments in Japanese to distinguish from spam.

目次