最終更新日時:
が更新

履歴 編集

function
<simd>

std::simd::basic_vec::operator[](C++26)

constexpr value_type
  operator[](simd-size-type i) const;    // (1) C++26

template<simd-integral I>
constexpr resize_t<I::size(), basic_vec>
  operator[](const I& indices) const;    // (2) C++26

概要

要素を取得する、または複数のインデックスによって要素の並べ替えを取得する。

  • (1) : 指定した位置の単一要素の値を取得する。
  • (2) : インデックスを保持したデータ並列型indicesによって、各要素を並べ替えたbasic_vecを取得する。

事前条件

  • (1) : i >= 0 && i < size()であること。

効果

  • (2) : 以下と等価である。
    return permute(*this, indices);
    

戻り値

  • (1) : 第i要素の値。
  • (2) : indicesの第j要素が指すインデックスの要素を第j要素とするbasic_vec。要素数はindicesの要素数(I::size())となる。

例外

  • (1) : 投げない

#include <simd>
#include <print>

namespace simd = std::simd;

int main()
{
  simd::vec<int, 4> v([](int i) { return (i + 1) * 10; });  // {10, 20, 30, 40}

  // (1) 単一要素の取得
  std::println("{}", v[2]);

  // (2) インデックス列による並べ替え
  simd::vec<int, 4> indices([](int i) { return 3 - i; });   // {3, 2, 1, 0}
  simd::vec<int, 4> r = v[indices];                         // {40, 30, 20, 10}

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

出力

30
40 30 20 10 

バージョン

言語

  • C++26

処理系

関連項目

参照