STL
STLとは、C++
の標準ライブラリのひとつ
汎用性が高く、型安全で高速なクラステンプレートや関数を提供するライブラリ
ゼロから作成するよりも効率的に開発できる
Standard Template Libraryの略
STLに含まれる機能の例
- コンテナ
- イテレータ
- アルゴリズム
- ファンクタ
コンテナ
コンテナとは、複数のオブジェクトを管理するオブジェクトのこと
スタックやキューなどのデータ構造も作成できる
代表的なコンテナの例
vector
、list
、set
、stack
、queue
vector
可変長配列のこと
動的に配列の要素数を管理する仕組み
サンプルプログラム
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec;
for (int i = 0; i < 3; i++)
{
vec.push_back(i);
}
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << endl;
}
return 0;
}
0
1
2
イテレータ
イテレータとは、コンテナ内での要素の位置を指すもの
コンテナの種類に依存しないで処理を共通化できる
サンプルプログラム
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec;
for (int i = 0; i < 3; i++)
{
vec.push_back(i);
}
for (auto it = vec.begin(); it != vec.end(); it++)
{
cout << *it << endl;
}
return 0;
}
0
1
2
アルゴリズム
アルゴリズムとは、コンテナ要素のソートなどの操作を行うテンプレート関数のこと
サンプルプログラム
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> vec;
for (int i = 0; i < 3; i++)
{
vec.push_back(i);
}
// 降順でソート
sort(vec.begin(), vec.end(), greater<int>() );
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << endl;
}
return 0;
}
2
1
0
ファンクタ
ファンクタとは、関数のように振る舞うことのできるオブジェクトのこと
関数オブジェクトとも呼ばれる
サンプルプログラム
大富豪の強いカードを判定するファンクタ
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// ファンクタ
class Daihugou
{
public:
// 演算子 () をオーバーロード
bool operator()(const int& a, const int& b)
{
int new_a = a;
int new_b = b;
if (a <= 2){
new_a += 13;
}
if (b <= 2){
new_b += 13;
}
return new_a > new_b;
}
};
int main() {
vector<int> vec;
for (int i = 1; i <= 13; i++)
{
vec.push_back(i);
}
// 大富豪の強いカード順でソート
sort(vec.begin(), vec.end(), Daihugou());
for (int i = 0; i < vec.size(); i++)
{
cout << vec[i] << endl;
}
return 0;
}
2
1
13
12
11
10
9
8
7
6
5
4
3