Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::valarray<T>::operator[]

      From cppreference.com
      <cpp‎ |numeric‎ |valarray
       
       
       
      std::valarray
      Member functions
      Non-member functions
      Helper classes
      Deduction guides(C++17)
       
      const T&               operator[](std::size_t pos)const;
      (1)
      T&                     operator[](std::size_t pos);
      (2)
      std::valarray<T>       operator[](std::slice slicearr)const;
      (3)
      std::slice_array<T>    operator[](std::slice slicearr);
      (4)
      std::valarray<T>       operator[](conststd::gslice& gslicearr)const;
      (5)
      std::gslice_array<T>   operator[](conststd::gslice& gslicearr);
      (6)
      std::valarray<T>       operator[](conststd::valarray<bool>& boolarr)const;
      (7)
      std::mask_array<T>     operator[](conststd::valarray<bool>& boolarr);
      (8)
      std::valarray<T>       operator[](conststd::valarray<std::size_t>& indarr)const;
      (9)
      std::indirect_array<T> operator[](conststd::valarray<std::size_t>& indarr);
      (10)

      Retrieve single elements or portions of the array.

      Theconst overloads that return element sequences create a newstd::valarray object.The non-const overloads return classes holding references to the array elements.

      1,2)

      Ifpos< size() isfalse, the behavior is undefined.

      (until C++26)

      Ifpos< size() isfalse:

      • If the implementation ishardened, acontract violation occurs. Moreover, if the contract-violation handler returns under “observe” evaluation semantic, the behavior is undefined.
      • If the implementation is not hardened, the behavior is undefined.
      (since C++26)
      3-10) If the argument does not specify a valid subset of*this, the behavior is undefined.

      Contents

      [edit]Parameters

      pos - position of the element to return
      slicearr -slice of the elements to return
      gslicearr -gslice of the elements to return
      boolarr - mask of the elements to return
      indarr - indices of the elements to return

      [edit]Return value

      1,2) A reference to the corresponding element.
      3,5,7,9) Astd::valarray object containing copies of the selected items.
      4,6,8,10) The corresponding data structure containing references to the selected items.

      [edit]Exceptions

      May throw implementation-defined exceptions.

      [edit]Notes

      For properstd::valarray valuesa,b and properstd::size_t valuesi,j, all of the following expressions always evaluate totrue:

      1)(a[i]= q, a[i])== q for non-consta
      2)&a[i+ j]==&a[i]+ j
      3)&a[i]!=&b[j] for every objectsa andb that are not aliases of one another
      • This means that there are no aliases in the elements and this property can be used to perform some kinds of optimization.

      References become invalid onresize() or when the array is destructed.

      For overloads(3,5,7,9), The function can be implemented with the return type different fromstd::valarray. In this case, the replacement type has the following properties:

      Slice/mask/indirect index accesses do not chain:v[v== n][std::slice(0,5,2)]= x; is an error becausestd::mask_array (the type ofv[v== n]) does not haveoperator[].

      [edit]Example

      Run this code
      #include <cstddef>#include <iomanip>#include <iostream>#include <valarray> int main(){std::valarray<int> data={0,1,2,3,4,5,6,7,8,9}; std::cout<<"Initial valarray:   ";for(int n: data)std::cout<<std::setw(3)<< n;std::cout<<'\n';     data[data>5]=-1;// valarray<bool> overload of operator[]// the type of data > 5 is std::valarray<bool>// the type of data[data > 5] is std::mask_array<int> std::cout<<"After v[v > 5] = -1:";for(std::size_t n=0; n< data.size();++n)std::cout<<std::setw(3)<< data[n];// regular operator[]std::cout<<'\n';}

      Output:

      Initial valarray:     0  1  2  3  4  5  6  7  8  9After v[v > 5] = -1:  0  1  2  3  4  5 -1 -1 -1 -1

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 389C++98the return type of overload(1) wasTcorrected toconst T&
      LWG 430C++98the behavior was unclear for overloads
      (3-10) if an invalid subset is specified
      the behavior is
      undefined in this case
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/valarray/operator_at&oldid=182347"

      [8]ページ先頭

      ©2009-2025 Movatter.jp