The polite way learn to C++17 サンプルコード集
著 The polite way learn to C++17 で掲載されたサンプルコード集
クラス | 関数
TPLCXX17::chap16_7_1::v1 名前空間

version 1 namespace [詳解]

クラス

class  search_insert
 線形探索による探索と挿入を行う関数オブジェクト [詳解]
 

関数

unsigned int sum (unsigned int n)
 1 から n までの総和を求めます [詳解]
 
template<class OutputIterator >
OutputIterator primes (unsigned int n, OutputIterator oiter)
 n より小さい素数値を総当たりによって oiter に全て出力します [詳解]
 
template<class ForwardIterator , class Compare >
void selection_sort (ForwardIterator first, ForwardIterator last, Compare comp)
 範囲を選択ソートします [詳解]
 
template<class ForwardIterator , class Compare >
void bubble_sort (ForwardIterator first, ForwardIterator last, Compare comp)
 範囲をバブルソートします [詳解]
 
template<class BidirectionalIterator , class Compare , class SearchInserter >
void insertion_sort (BidirectionalIterator first, BidirectionalIterator last, Compare comp, SearchInserter search_inserter)
 範囲を挿入ソートします [詳解]
 
template<class RandomAccessIterator , class Compare >
void merge_sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
 範囲をマージソートします [詳解]
 
template<class BidirectionalIterator , class Compare >
void quick_sort (BidirectionalIterator first, BidirectionalIterator last, Compare comp)
 範囲の先頭をピボットとしてクイックソートを行います [詳解]
 
template<class ForwardIterator , class T >
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T &val)
 指定された要素以上の値が現れる最初のイテレータを取得します。この関数は std::lower_bound と同等です [詳解]
 
template<class ForwardIterator , class T , class Compare >
bool binary_search (ForwardIterator first, ForwardIterator last, const T &val, Compare comp)
 二分探索によって要素が範囲内に存在するかどうか comp を利用して判定します。この関数は std::binary_search と同等です [詳解]
 

詳解

version 1 namespace

関数詳解

◆ binary_search()

template<class ForwardIterator , class T , class Compare >
bool TPLCXX17::chap16_7_1::v1::binary_search ( ForwardIterator  first,
ForwardIterator  last,
const T &  val,
Compare  comp 
)

二分探索によって要素が範囲内に存在するかどうか comp を利用して判定します。この関数は std::binary_search と同等です

引数
first範囲の最初のイテレータ
last範囲の最後のイテレータ
val検索対象の値
compbool 値へ文脈変換可能な比較関数オブジェクト
戻り値
val と同等の値が [first, last] にある場合は true 、そうでない場合は false を返します
#include <vector>
#include <numeric>
void binary_search_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
bool res = TPLCXX17::chap16_7_1::v1::binary_search(std::begin(v), std::end(v), 4);
}

◆ bubble_sort()

template<class ForwardIterator , class Compare >
void TPLCXX17::chap16_7_1::v1::bubble_sort ( ForwardIterator  first,
ForwardIterator  last,
Compare  comp 
)

範囲をバブルソートします

引数
first範囲の最初のイテレータ
last範囲の最後 + 1 のイテレータ
compbool 値へ文脈変換可能な比較関数オブジェクト
戻り値
なし
#include <numeric>
#include <random>
void bubble_sort_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
std::random_device seed;
std::mt19937 mt(seed());
std::shuffle(std::begin(v), std::end(v), mt);
TPLCXX17::chap16_7_1::v1::bubble_sort(std::begin(v), std::end(v)); // less than
TPLCXX17::chap16_7_1::v1::bubble_sort(std::begin(v), std::end(v), std::greater<>()); // greater than
}

◆ insertion_sort()

template<class BidirectionalIterator , class Compare , class SearchInserter >
void TPLCXX17::chap16_7_1::v1::insertion_sort ( BidirectionalIterator  first,
BidirectionalIterator  last,
Compare  comp,
SearchInserter  search_inserter 
)

範囲を挿入ソートします

引数
first範囲の最初のイテレータ
last範囲の最後 + 1 のイテレータ
compbool 値へ文脈変換可能な比較関数オブジェクト
search_inserter挿入位置の検索を行い、挿入を実行する関数オブジェクト
戻り値
なし
#include <numeric>
#include <random>
void insertion_sort_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
std::random_device seed;
std::mt19937 mt(seed());
std::shuffle(std::begin(v), std::end(v), mt);
TPLCXX17::chap16_7_1::v1::insertion_sort(std::begin(v), std::end(v)); // less than
TPLCXX17::chap16_7_1::v1::insertion_sort(std::begin(v), std::end(v), std::greater<>()); // greater than
}

◆ lower_bound()

template<class ForwardIterator , class T >
ForwardIterator TPLCXX17::chap16_7_1::v1::lower_bound ( ForwardIterator  first,
ForwardIterator  last,
const T &  val 
)

指定された要素以上の値が現れる最初のイテレータを取得します。この関数は std::lower_bound と同等です

引数
first範囲の最初のイテレータ
last範囲の最後 + 1 のイテレータ
val検索対象の値
戻り値
[first, last] 内のイテレータが val 以上の要素のうち最初のものを指すイテレータを返します。val 以上の要素がない場合 last を返します
#include <vector>
#include <numeric>
void lower_bound_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
auto iter = TPLCXX17::chap16_7_1::v1::lower_bound(std::begin(v), std::end(v), 4);
}

◆ merge_sort()

template<class RandomAccessIterator , class Compare >
void TPLCXX17::chap16_7_1::v1::merge_sort ( RandomAccessIterator  first,
RandomAccessIterator  last,
Compare  comp 
)

範囲をマージソートします

引数
first範囲の最初のイテレータ
last範囲の最後 + 1 のイテレータ
compbool 値へ文脈変換可能な比較関数オブジェクト
戻り値
なし
#include <numeric>
#include <random>
void merge_sort_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
std::random_device seed;
std::mt19937 mt(seed());
std::shuffle(std::begin(v), std::end(v), mt);
TPLCXX17::chap16_7_1::v1::merge_sort(std::begin(v), std::end(v)); // less than
TPLCXX17::chap16_7_1::v1::merge_sort(std::begin(v), std::end(v), std::greater<>()); // greater than
}

◆ primes()

template<class OutputIterator >
OutputIterator TPLCXX17::chap16_7_1::v1::primes ( unsigned int  n,
OutputIterator  oiter 
)

n より小さい素数値を総当たりによって oiter に全て出力します

引数
nunsigned int 型の整数値
oiter出力イテレータ
戻り値
出力イテレータを返します
#include <vector>
void primes_sample()
{
std::vector<unsigned int> res;
TPLCXX17::chap16_7_1::v1::primes(42, std::back_inserter(res));
}

◆ quick_sort()

template<class BidirectionalIterator , class Compare >
void TPLCXX17::chap16_7_1::v1::quick_sort ( BidirectionalIterator  first,
BidirectionalIterator  last,
Compare  comp 
)

範囲の先頭をピボットとしてクイックソートを行います

引数
first範囲の最初のイテレータ
last範囲の最後 + 1 のイテレータ
compbool 値へ文脈変換可能な比較関数オブジェクト
戻り値
なし
#include <numeric>
#include <random>
void quick_sort_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
std::random_device seed;
std::mt19937 mt(seed());
std::shuffle(std::begin(v), std::end(v), mt);
TPLCXX17::chap16_7_1::v1::quick_sort(std::begin(v), std::end(v)); // less than
TPLCXX17::chap16_7_1::v1::quick_sort(std::begin(v), std::end(v), std::greater<>()); // greater than
}

◆ selection_sort()

template<class ForwardIterator , class Compare >
void TPLCXX17::chap16_7_1::v1::selection_sort ( ForwardIterator  first,
ForwardIterator  last,
Compare  comp 
)

範囲を選択ソートします

引数
first範囲の最初のイテレータ
last範囲の最後 + 1 のイテレータ
compbool 値へ文脈変換可能な比較関数オブジェクト
戻り値
なし
#include <numeric>
#include <random>
void selection_sort_sample()
{
std::vector<int> v(10);
std::iota(std::begin(v), std::end(v), 0);
std::random_device seed;
std::mt19937 mt(seed());
std::shuffle(std::begin(v), std::end(v), mt);
TPLCXX17::chap16_7_1::v1::selection_sort(std::begin(v), std::end(v)); // less than
TPLCXX17::chap16_7_1::v1::selection_sort(std::begin(v), std::end(v), std::greater<>()); // greater than
}

◆ sum()

unsigned int TPLCXX17::chap16_7_1::v1::sum ( unsigned int  n)

1 から n までの総和を求めます

引数
nunsigned int の整数値
戻り値
1 から n までの総和を返します
void sum_sample()
{
[[maybe_unused]] int r = TPLCXX17::chap16_7_1::v1::sum(10);
}