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

version 2 namespace [詳解]

クラス

class  search_insert
 二分探索による探索と挿入を行う関数オブジェクト。v1::insertion_sort に対して利用します。 [詳解]
 

関数

unsigned int sum (unsigned int n)
 1 から n までの総和を総和の公式を利用して求めます [詳解]
 
template<class OutputIterator >
OutputIterator primes (unsigned int n, OutputIterator oiter)
 n より小さい素数値をエラトステネスの篩によって oiter に全て出力します [詳解]
 
template<class Iter >
constexpr Iter med3_iter (Iter x, Iter y, Iter z)
 median-of-three のイテレータを得ます [詳解]
 
template<class BidirectionalIterator , class Compare >
void quick_sort (BidirectionalIterator first, BidirectionalIterator last, Compare comp)
 median-of-three によってピボットを選択し、クイックソートを行います [詳解]
 

詳解

version 2 namespace

関数詳解

◆ med3_iter()

template<class Iter >
constexpr Iter TPLCXX17::chap16_7_1::v2::med3_iter ( Iter  x,
Iter  y,
Iter  z 
)

median-of-three のイテレータを得ます

引数
xtypename std::iterator_traits<decltype(x)>::value_type が operator< によって比較可能なイテレータ
ytypename std::iterator_traits<decltype(y)>::value_type が operator< によって比較可能なイテレータ
ztypename std::iterator_traits<decltype(z)>::value_type が operator< によって比較可能なイテレータ
戻り値
median-of-three のイテレータを返します
void med3_iter_sample()
{
std::array<int, 3> ar { 4, 2, 3 };
[[maybe_unused]] auto r = med3_iter(std::begin(ar), std::next(std::begin(ar), 1), std::next(std::end(ar), -1)); // it will return std::next(std::end(ar), -1)
}

◆ primes()

template<class OutputIterator >
OutputIterator TPLCXX17::chap16_7_1::v2::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::v2::primes(42, std::back_inserter(res));
}

◆ quick_sort()

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

median-of-three によってピボットを選択し、クイックソートを行います

引数
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::v2::quick_sort(std::begin(v), std::end(v)); // less than
TPLCXX17::chap16_7_1::v2::quick_sort(std::begin(v), std::end(v), std::greater<>()); // greater than
}

◆ sum()

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

1 から n までの総和を総和の公式を利用して求めます

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