最終更新日時:
が更新

履歴 編集

function template
<simd>

std::simd::minmax(C++26)

namespace std::simd {
  template<class T, class Abi>
  constexpr std::pair<basic_vec<T, Abi>, basic_vec<T, Abi>>
    minmax(const basic_vec<T, Abi>& a,
           const basic_vec<T, Abi>& b) noexcept;  // C++26
}

概要

minmaxは、2つのbasic_vecから、要素ごとの最小値と最大値をまとめて取得する関数である。結果はstd::pairfirstに最小値、secondに最大値が格納される。

効果

以下と等価である:

return std::pair{min(a, b), max(a, b)};

戻り値

firstmin(a, b)secondmax(a, b)であるstd::pair

例外

投げない

#include <simd>
#include <print>

namespace simd = std::simd;

int main()
{
  simd::vec<int, 4> a([](int i) { return i; });     // {0, 1, 2, 3}
  simd::vec<int, 4> b([](int i) { return 3 - i; }); // {3, 2, 1, 0}

  // 要素ごとの最小値・最大値をまとめて取得
  auto [lo, hi] = simd::minmax(a, b);

  for (int i = 0; i < lo.size(); ++i)
    std::print("{} ", lo[i]);
  std::println("");

  for (int i = 0; i < hi.size(); ++i)
    std::print("{} ", hi[i]);
  std::println("");
}

出力

0 1 1 0 
3 2 2 3 

バージョン

言語

  • C++26

処理系

関連項目

参照