【C++】algorithmヘッダで出来ることと使い方【標準ライブラリ】
目次
ソート
`std::sort`を使うと、コンテナの要素を昇順または降順に並べ替えられる。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {5, 2, 8, 1, 3};
std::sort(v.begin(), v.end());
for (int x : v) {
std::cout << x << " ";
}
}
出力: `1 2 3 5 8`
検索
`std::find`を使うと、コンテナ内の特定の要素を検索できる。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {10, 20, 30, 40, 50};
auto it = std::find(v.begin(), v.end(), 30);
if (it != v.end()) {
std::cout << "見つかりました: " << *it << std::endl;
} else {
std::cout << "見つかりませんでした" << std::endl;
}
}
最小値・最大値の取得
`std::min_element`や`std::max_element`を使うと、最小値・最大値の要素を取得できる。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {7, 2, 8, 4, 1};
auto min_it = std::min_element(v.begin(), v.end());
auto max_it = std::max_element(v.begin(), v.end());
std::cout << "最小値: " << *min_it << std::endl;
std::cout << "最大値: " << *max_it << std::endl;
}
累積演算
`std::accumulate`を使うと、要素の合計を計算できる。
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
int sum = std::accumulate(v.begin(), v.end(), 0);
std::cout << "合計: " << sum << std::endl;
}
要素の変換
`std::transform`を使うと、要素を変更できる。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::transform(v.begin(), v.end(), v.begin(), [](int x) { return x * 2; });
for (int x : v) {
std::cout << x << " ";
}
}
要素の削除
`std::remove`を使うと、特定の値を削除できる。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 2, 4, 2, 5};
v.erase(std::remove(v.begin(), v.end(), 2), v.end());
for (int x : v) {
std::cout << x << " ";
}
}
重複の削除
`std::unique`を使うと、連続する重複を削除できる。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 1, 2, 2, 3, 3, 4, 4, 5};
v.erase(std::unique(v.begin(), v.end()), v.end());
for (int x : v) {
std::cout << x << " ";
}
}
条件に基づく分割
`std::partition`を使うと、条件を満たす要素を前方に移動できる。
マージ
`std::merge`を使うと、2つのソート済みコンテナをマージできる。
順列の生成
`std::next_permutation`を使うと、次の辞書順の順列を生成できる。