Skip to content

Latest commit

 

History

History
98 lines (71 loc) · 2.51 KB

File metadata and controls

98 lines (71 loc) · 2.51 KB

operator[]

  • simd[meta header]
  • std::simd[meta namespace]
  • basic_vec[meta class]
  • function[meta id-type]
  • cpp26[meta cpp]
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
  • simd-size-type[link /reference/simd/simd-size-type.md]
  • simd-integral[link /reference/simd/simd-integral.md]

概要

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

  • (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("");
}
  • v[2][color ff0000]
  • r.size()[link size.md]

出力

30
40 30 20 10 

バージョン

言語

  • C++26

処理系

関連項目

参照