LoginSignup
6

More than 3 years have passed since last update.

c++メモ

Last updated at Posted at 2018-04-28

前書き

 競技プログラミングを始めるにあたって、c++を始めることにしました。その上で自分のぶち当たった壁と忘れそうなことをメモっていきます。公開してからも随時更新していきますので、いいねでもストックでもしてもらえれば光栄です。

自分がどんな言語をどれだけ扱ってきたかを先に書いておきます。

  • c言語・・・半年
  • swift・・・1年
  • python・・・1年半
  • c++・・・new!

こんな感じです

機能

■ ストリーム入出力

変数の型を意識せずに使える入出力機構。

要するにscanfとprintfのc++版

こんな感じ

#include <iostream>

using namespace std;

int a, b;

cin >> a >> b;

cout << a+b << endl;

このプログラムを実行するとcinで標準入力待ち状態となる。もし、5 2と入力すると7と出力される。

■ constについて

 変数の宣言にconstをつけることで、その変数の値が書き換えられないようにできる。

こんな感じ

const int max_len = 120;
max_len = 130; //コンパイルエラー

constをつける位置はどっちでもいい


const int value
int const value

でも、ポインタが絡んでくると順番にも気をつけなければならない。

  1. *の前にconstをつけた場合は、ポインタを指している先が不変になる。
  2. *の後にconstをつけた場合は、ポインタ変数そのものが不変になる。

1.の場合

const int* p1 = &value1;

//ポインタ変数そのものを変更することはできるが、
p1 = &value2;             //OK
//ポインタ変数が指している実態を変更することはできない。
*p = 10;                  //NG

2.の場合

int* const p2 = &value1;

// ポインタ変数そのものを変更することはできないが、
p2 = &value2;             //NG
// ポインタ変数が指している実態は変更することはできる。
*p2 = 10;                 //OK

■ 名前空間(namespace)

大規模開発の際に変数名や関数名が衝突してしまうことを避けるための仕組み。

例えば、

namespace Hoge {
    int a;
    void hello();
}

namespace Geho {
    int a;
    void hello();
}

と書いて、

Hoge::a=1;
Geho::a=2;

Hoge::hello();
Geho::hello();

と使うと、aとhelloは別として扱われる。

そして、ファイルの先頭などにusing namespace Hogeと書くとHoge::を省略することができる。

STL

STLとは、C++の標準ライブラリの一つ。

特に競技プログラミングでは重宝されるらしい。

algorithmとかstackとかqueueとかstringとか...

◆ algorithm

  • max(a, b)・・・aとbの大きい方を返す。(minもあるよ。)
int a=10, b=4;
int large = max(a, b) // 10
  • swap(a, b)・・・aとbの値を交換する。
int a=10, b=4;
swap(a, b); //aが4でbが10になってる。
  • sort(f, t)・・・fからt-1までを昇順ソートする。(fとtは配列のポインタ)
int a[] = {6, 2, 1, 3, 7};
sort(a, a+5) // {1, 2, 3, 6, 7}

降順でしたかったら、

sort(a, a+5, greater<int>());
  • reverse(f, t)・・・fからt-1までを反転する。
int a[] = {4, 6, 2, 7, 5}
reverse(a, a+5) // {5, 7, 2, 6, 4}
  • count(f, t, x)・・・fからt-1までに含まれるxの数を返す。
int a[] = {2, 4, 7, 3, 6, 7, 7, 1};
int cnt7 = count(a, a+8, 7); // 3
  • fill(f, t, x)・・・fからt-1までを全てxで初期化する。
int a[] = {4, 2, 6, 2, 1, 5}
fill(a, a+6, 1); // {1, 1, 1, 1, 1, 1}

他にも便利な関数は色々あります。
equel, find, search, copy, remove, replace, random_shuffle, unique, lower_bound, upper_bound, binary_search, max_element, min_element, next_permutation, などなど...

参考

C言語経験者のためのc++入門
c++におけるconstをつける位置の違い

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6