2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【C++】基礎を学ぶ㉒~STL~

Last updated at Posted at 2022-07-18

STL

STLとは、C++標準ライブラリのひとつ
汎用性が高く型安全高速なクラステンプレートや関数を提供するライブラリ
ゼロから作成するよりも効率的に開発できる
Standard Template Libraryの略

STLに含まれる機能の例

  • コンテナ
  • イテレータ
  • アルゴリズム
  • ファンクタ

コンテナ

コンテナとは、複数のオブジェクトを管理するオブジェクトのこと
スタックキューなどのデータ構造も作成できる

代表的なコンテナの例

vectorlistsetstackqueue

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

次の記事

【C++】基礎を学ぶ㉓~例外処理~

2
2
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?