C++のライブラリが凄い様なので、色々調べてまとめてみようと思いました。
競技プログラミングに強い言語でもあるので、学んでおいて損は無いと思います!
コード1:next_permutation
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);
}
コード2:cinとcoutのフラッシュ関係を省く為のコード
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";
}
コード3:vectorの基本操作
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);
}
コード4:vectorの基本操作2
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;
}
}
コード5:mapの基本操作
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);
}
コード6:stringの基本
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);
}
コード7:pairの使い方
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);
}
コード8:iteratorの基本操作
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++;
}
}
コード9:swapがあるんだよ
swap
#include <algorithm>
using namespace std;
int main(void) {
int a = 1;
int b = 5;
swap(a, b);
return(0);
}
コード10:sortだってあるんです!
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;
}
}
コード11:sortは降順にも出来るよ!
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);
}
コード12:どちらが大きい?どちらが小さい?にif文不要!
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);
}
コード13:binary_search(二分探索)も出来る
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...)を紹介していきました!