---
name: "std::indirect_array"
section: "3cxx"
platform: "linux"
package: "libstdc++-12-doc"
version: "12.4.0-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/std::indirect_array/3cxx"
---

# std::indirect\_array(3cxx)

Reference to arbitrary subset of an array.

## NAME

std::indirect\_array\< \_Tp \> - Reference to arbitrary subset of an array.

## SYNOPSIS

`#include <valarray>`

### Public Types

**typedef** \_Tp **value\_type**\

### Public Member Functions

**indirect\_array** (const **indirect\_array** &)\
 Copy constructor. Both slices refer to the same underlying array.  template\<**class** **\_Dom** \> **void** **operator%=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator%=** (const **valarray**\< \_Tp \> &) const\
 Modulo slice elements by corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator&=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator&=** (const **valarray**\< \_Tp \> &) const\
 Logical and slice elements with corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator\*=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator\*=** (const **valarray**\< \_Tp \> &) const\
 Multiply slice elements by corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator+=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator+=** (const **valarray**\< \_Tp \> &) const\
 Add corresponding elements of *v* to slice elements.  template\<**class** **\_Dom** \> **void** **operator-=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator-=** (const **valarray**\< \_Tp \> &) const\
 Subtract corresponding elements of *v* from slice elements.  template\<**class** **\_Dom** \> **void** **operator/=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator/=** (const **valarray**\< \_Tp \> &) const\
 Divide slice elements by corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator\<\<=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator\<\<=** (const **valarray**\< \_Tp \> &) const\
 Left shift slice elements by corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator=** (const \_Tp &) const\
 Assign all slice elements to *t*.  **indirect\_array** & **operator=** (const **indirect\_array** &)\
 Assignment operator. Assigns elements to corresponding elements of *a*.  template\<**typename** \_Tp \> **indirect\_array**\< \_Tp \> & **operator=** (const **indirect\_array**\< \_Tp \> &\_\_a)\
 **void** **operator=** (const **valarray**\< \_Tp \> &) const\
 Assign slice elements to corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator\>\>=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator\>\>=** (const **valarray**\< \_Tp \> &) const\
 Right shift slice elements by corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator^=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator^=** (const **valarray**\< \_Tp \> &) const\
 Logical xor slice elements with corresponding elements of *v*.  template\<**class** **\_Dom** \> **void** **operator\|=** (const \_Expr\< **\_Dom**, \_Tp \> &) const\
 **void** **operator\|=** (const **valarray**\< \_Tp \> &) const\
 Logical or slice elements with corresponding elements of *v*.

### Friends

**class** **gslice\_array\< \_Tp \>**\
 **class** **valarray\< \_Tp \>**\

## Detailed Description

### template\<class \_Tp\>

class std::indirect\_array\< \_Tp \>"Reference to arbitrary subset of an array.

An indirect\_array is a reference to the actual elements of an array specified by an ordered array of indices. The way to get an indirect\_array is to call operator\[\](valarray\<size\_t\>) on a valarray. The returned indirect\_array then permits carrying operations out on the referenced subset of elements in the original valarray.

For example, if an indirect\_array is obtained using the array (4,2,0) as an argument, and then assigned to an array containing (1,2,3), then the underlying array will have array\[0\]==3, array\[2\]==2, and array\[4\]==1.

**Parameters**

*Tp* Element type.

## Constructor & Destructor Documentation

### template\<class \_Tp \> std::indirect\_array\< \_Tp \>::indirect\_array (const indirect\_array\< \_Tp \> &)

Copy constructor. Both slices refer to the same underlying array.

## Member Function Documentation

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator%= (const valarray\< \_Tp \> &) const

Modulo slice elements by corresponding elements of *v*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator&= (const valarray\< \_Tp \> &) const

Logical and slice elements with corresponding elements of *v*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator\*= (const valarray\< \_Tp \> &) const

Multiply slice elements by corresponding elements of *v*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator+= (const valarray\< \_Tp \> &) const

Add corresponding elements of *v* to slice elements.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator-= (const valarray\< \_Tp \> &) const

Subtract corresponding elements of *v* from slice elements.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator/= (const valarray\< \_Tp \> &) const

Divide slice elements by corresponding elements of *v*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator\<\<= (const valarray\< \_Tp \> &) const

Left shift slice elements by corresponding elements of *v*.

### template\<class \_Tp \> indirect\_array & std::indirect\_array\< \_Tp \>::operator= (const indirect\_array\< \_Tp \> &)

Assignment operator. Assigns elements to corresponding elements of *a*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator\>\>= (const valarray\< \_Tp \> &) const

Right shift slice elements by corresponding elements of *v*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator^= (const valarray\< \_Tp \> &) const

Logical xor slice elements with corresponding elements of *v*.

### template\<class \_Tp \> void std::indirect\_array\< \_Tp \>::operator\|= (const valarray\< \_Tp \> &) const

Logical or slice elements with corresponding elements of *v*.

## Author

Generated automatically by Doxygen for libstdc++ from the source code.
