Retrieve single elements or portions of the array.
The const overloads that return element sequences create a new std::valarray object. The non-const overloads return classes holding references to the array elements.
1,2)If pos < size() is false, the behavior is undefined.
(until C++26)If pos < size() is false:
3-10) If the argument does not specify a valid subset of *this, the behavior is undefined.
[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 value1,2) A reference to the corresponding element.
3,5,7,9)A
std::valarrayobject containing copies of the selected items.
4,6,8,10) The corresponding data structure containing references to the selected items.
[edit] ExceptionsMay throw implementation-defined exceptions.
[edit] NotesFor proper std::valarray values a, b and proper std::size_t values i, j, all of the following expressions always evaluate to true:
1) (a[i] = q, a[i]) == q for non-const a
2) &a[i + j] == &a[i] + jfor every objects
aand
bthat are not aliases of one another
References become invalid on resize()
or when the array is destructed.
For overloads (3,5,7,9), The function can be implemented with the return type different from std::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 because std::mask_array (the type of v[v == n]) does not have operator[].
[edit] Example#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 9 After 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.
DR Applied to Behavior as published Correct behavior LWG 389 C++98 the return type of overload (1) wasT
corrected to const T& LWG 430 C++98 the behavior was unclear for overloads
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4