勉強@C++

C++のライブラリが凄い様なので、色々調べてまとめてみようと思いました。
競技プログラミングに強い言語でもあるので、学んでおいて損は無いと思います！
コード１：next_permutation

```cpp:next_permutation
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int main(void) {
    int n;
    
    while((scanf("%d", &n)) != EOF) {
        int myints[n];
        memset(myints, 0, sizeof(myints));
        for(int r = 0; r < n; r++) {
            cin >> myints[r];
        }
        sort(myints, myints + n);
        
        do {
            for(int r = 0; r < n; r++) {
                cout << myints[r] << ((r != n - 1) ? ' ' : '\n');
            }
        }while(next_permutation(myints, myints + n));
    }
    
    return(0);
}
```

-------------------------------------------------------------------
コード２：cinとcoutのフラッシュ関係を省く為のコード

```cpp:cin_and_coutFrash
#include <iostream>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    int x;
    cin >> x;
    cout << x * x * x << "\n";
}
```

コード３：vectorの基本操作

```cpp:vector
#include <iostream>
#include <vector>
using namespace std;

int main(void) {
    vector<int> vc;
    int n;
    cin >> n;
    
    while(n--) {
        int x;
        cin >> x;
        vc.push_back(x);
    }
    
    n = (int)vc.size() / 2;
    if(vc[n] == vc.at(n))
        cout << n << "\n";
    
    return(0);
}
```

コード４：vectorの基本操作２

```cpp:vector2
#include <vector>
#include <iostream>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    for(int N; cin >> N && N;) {
        vector<int> inputs;
        for(int r = 0; r < N; r++) {
            int value;
            cin >> value;
            inputs.push_back(value);
        }
        sort(inputs.begin(), inputs.end());
        for(int r = 0; r < inputs.size(); r++) {
            if(r) {
                cout << " ";
            }
            cout << inputs[r];
        }
        cout << endl;
    }
}

```

コード５：mapの基本操作

```cpp:map
#include <map>
#include <iostream>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    map<char, int > mp;
    mp['a'] = 1;
    mp['b'] = 2;
    
    cout << mp['a'] << ' ' << mp['b'] << '\n';
    if(mp.find('c') != mp.end())
        cout << mp['c'] << '\n';
    
    return(0);
}
```

コード６：stringの基本

```cpp:string
#include <iostream>
#include <string>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    string str;
    str = "this is a string";
    str[2] = 'a';
    str[3] = 't';
    if(str.length() >= 5)
        cout << str << '\n';
    if(str.find("is") != string::npos)
        cout << str.find("is") << '\n';
    
    return(0);
}
```

コード７：pairの使い方

```cpp:pair
#include <utility>
#include <vector>
#include <iostream>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    vector< pair<int, int> > vc;
    int n;
    cin >> n;
    while(n--) {
        int x, y;
        cin >> x >> y;
        vc.push_back( pair<int, int>(x, y));
    }
    pair<int, int> p = vc.front();
    cout << p.first << ' ' << p.second << '\n';
    
    return(0);
}
```

コード８：iteratorの基本操作

```cpp:iterator
#include <iostream>
#include <vector>
using namespace std;
int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    int n;
    cin >> n;
    vector<int> vc;
    while(n--) {
        int x;
        cin >> x;
        vc.push_back(x);
    }
    //vector<T>のイテレータはvector<T>::iterator型
    vector<int>::iterator it = vc.begin();
    vector<int>::iterator endIt = vc.end();
    
    while(it != endIt) {
        cout << *it << '\n';
        it++;
    }
}
```

コード９：swapがあるんだよ

```cpp:swap
#include <algorithm>
using namespace std;

int main(void) {
    int a = 1;
    int b = 5;
    
    swap(a, b);
    
    return(0);
}
```

コード１０：sortだってあるんです！

```cpp:sort
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    int n;
    cin >> n;
    
    vector<int> vc;
    while(n--) {
        int x;
        cin >> x;
        vc.push_back(x);
    }
    
    sort(vc.begin(), vc.end());
    
    for(int r = 0; r < vc.size(); r++) {
        cout << vc[r] << endl;
    }
}
```

コード１１：sortは降順にも出来るよ！

```cpp:sort_downer
#include <algorithm>
#include <functional>
using namespace std;

int main(void) {
    int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    sort(array, array + 9, greater<int>());
    
    
    
    return(0);
}
```

コード１２：どちらが大きい？どちらが小さい？にif文不要！

```cpp:max_or_min
#include <algorithm>
#include <iostream>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    
    int a = max(1, 5);
    int b = min(1, 5);
    
    cout << a << " " << b << endl;
    
    return(0);
}
```

コード１３：binary_search（二分探索）も出来る

```cpp:binary_search
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void) {
    cin.tie();
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    
    vector<int> vc;
    while(n--) {
        int x;
        cin >> x;
        vc.push_back(x);
    }
    sort(vc.begin(), vc.end());
    
    int x;
    cin >> x;
    if(binary_search(vc.begin(), vc.end(), x))
       cout << "I found" << x << '\n';
    vector<int>::iterator lit = lower_bound(vc.begin(), vc.end(), x);
    vector<int>::iterator uit = upper_bound(vc.begin(), vc.end(), x);
    if(lit != vc.end() && lit != uit)
        cout << uit - lit << '\n';
    
    return(0);
}

```

いやー、Qiitaのコードはりつけの仕方ここで初めて知りました・・・
すごい見やすくてびっくり！
今回は、C++の便利なやつ（コンテナやユーティリティ関数etc...）を紹介していきました！