0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Atcoder】学生灰色コーダーの私がc++のSTLをまとめる。二度と検索しなくていいように。

Posted at

はじめに

こんにちは、3週ほど前から本格的にAtCoder Beginner Contestに参加し始めた学生です。

コンテスト中に、「このSTLってどう使うんだっけ?」となり、検索しに行くことが多いので、一度まとめてみようと思い記事を書いています!

一度にいろいろ書くのもパンクしてしまいそうなので、メソッドや、STLコンテナ等は別の記事に書きます!

この記事はあくまでも、「調査してまとめる」という作業による、記憶の定着のためのものですので内容についてはN番煎じのものになっています。間違っている部分があれば指摘していただけると幸いです!

最大値・最小値 max min

  • 最大値・もしくは最小値を返す
max(a,b);//大きい方を返す
max([a,b,c,d,e]);//一番大きいのを返す

交換 swap

  • 二つの変数の値を交換する
  • いちいちtmpとか準備して交換しなくていいからな!!
swap(a,b); //aとbの値を交換

乱数生成 rand

  • $0~ 2 ^ {31} - 1$の乱数を返す
  • 1~Nの乱数を生成したい場合はrand()%N+1とする
  • srandによるシード値の指定が必要
srand((unsigned)time(NULL)); //時刻でシード値を設定

rand()%5+1 //1以上5以下のランダムな整数を返す

配列,vectorを逆順にする reverse

  • .begin().end()を使い、イテレータにより指定
  • stringにも適用可能
  • vectorのa:a.begin()+l a.end()-rで指定

  • 配列:a+l,a-rで指定

vector<char> a = { 'a', 'b', 'c', 'd', 'e' };

reverse(a.begin()+1,a.begin()+3);//=>{ 'a', 'd', 'c', 'b', 'e' }

ソート sort

  • reverseと同じ方法で指定した範囲をソートする
  • デフォルトは昇順(小さい順)
  • 引数にgreater()を追加することで降順(大きい順)にソート可能
vetor<int> a={5,2,1,4,3};

sort(a.begin(),a.end());//{1,2,3,4,5}
sort(a.begin(),a.end(),greater<int>());//{5,4,3,2,1}

2分探索 lower_bound

  • 昇順にソートされている範囲のイテレータを返す
  • を取得できる
  • 全探索より圧倒的に早い
  • 範囲の指定方法はreversesortと同じ
  • 3つ目の引数に探索したい値を指定する
  • 最後にa.begin()をマイナスすることでインデックスを取得できる
vector<int> a={5,2,1,4,3}
sort(a.begin(),a.end())

cout << lower_bound(a.begin(),a.end(),4)-a.begin() //=>3

カウント count

  • 配列、vectorの指定した範囲中に含まれる、指定した値の数を返す
vector<char> a ={'a','b','a','c','a'};
cout << count(a.begin(),a.end(),'a');//=>3

値の存在と場所 find

  • その値が存在するのか、存在する場合はどこにあるのかを返す
  • reverse,sort,lower_boundと同じ方法で範囲を指定できる
  • 値が複数ある場合は先頭のイテレータが、含まれない場合は末尾の隣のイテレータが返される
  • lower_boundと同じでa.begin()をマイナスしてインデックスを取得する
vector<int> a = {4,6,2,15,8};

cout << find(a.begin(),a.end(),15)-a.begin();//=>3
coust << find(a.begin(),a.end(),999999);//=>5

2進数中の1の数 `__builtin_popcount

  • 立ってるビット数を数えてくれる
int num = 15;
cout << __builtin_popcount(num)//=>4

まとめ

以上になります。もう検索しません!二度と!

findcountを知らずに今までごり押しでfor文回してたのが恥ずかしいです^^

とりあえず茶色を目指します!!!

参考

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?