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

zuka

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

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

目次

本記事の概要

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

実装

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

// 構造体宣言
struct Clock{
  int hour;
  int minute;
  int second;
  void set(int h, int m, int s){
    hour = h;
    minute = m;
    second = s;
  }

  // 時刻表示するメンバ関数
  void to_str(){
    printf("%02d:%02d:%02d\n", hour, minute, second);
  }

  // diff_secondから時刻を求めるメンバ関数
  void shift(int diff_second){
    int all;
    all = hour*3600 + minute*60 + second;
    all += diff_second;
    if (all > 23*3600 + 59*60 + 60){
      all -= 23*3600 + 59*60 + 60;
    }
    if (all < 0){
      all += 23*3600 + 59*60 + 60;
    }
    hour = all/3600;
    if (hour == 24){
      hour = 0;
    }
    all %= 3600;
    minute = all/60;
    all %= 60;
    second = all;
  }
};

int main() {
  int hour, minute, second;
  cin >> hour >> minute >> second;
  int diff_second;
  cin >> diff_second;

  // 構造体のオブジェクト生成
  Clock clock;

  // 受け取った入力をオブジェクトに渡す
  clock.set(hour, minute, second);

  // 時刻表示するメンバ関数
  clock.to_str();

  // diff_secondだけ時刻をずらすメンバ関数
  clock.shift(diff_second);

  // 時刻表示するメンバ関数
  clock.to_str();
}

ポイント

今回おさえるべき内容

 構造体で複数の型をまとめた型を記述できる

 構造体型に基づく実際の値をオブジェクトと呼ぶ

 構造体の中で利用される変数をメンバ変数,関数をメンバ関数と呼ぶ

オブジェクト志向言語におけるクラスのような概念が構造体です。構造体を利用すれば,複数の型を一挙にまとめて記述することができ,見通よくコーディングを行うことができます。以下のようにして構造体を宣言することができます。

struct 構造体名 {
  返り値の型 メンバ関数名(引数の型1 引数名1, ...) {
    メンバ関数の処理
  }
};

また,以下のようにして構造体からオブジェクトを生成できます。

構造体名 変数名;

オブジェクトから以下のようにしてメンバ変数やメンバ関数にアクセスできます。

オブジェクト.メンバ変数
オブジェクト.メンバ関数(引数1, ...)

競技プログラミングで構造体を用いるのはだいぶ上級者だと思います。まずは,構造体というものがあるという程度の認識で先に進むことが吉だと思います。

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

コメント

コメントする

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

目次