std::valarray<T>:: operator[]
|
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
[
]
(
const
std::
gslice
&
gslicearr
)
const
;
|
(5) | |
|
std::
gslice_array
<
T
>
operator
[
]
(
const
std::
gslice
&
gslicearr
)
;
|
(6) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
valarray
<
bool
>
&
boolarr
)
const
;
|
(7) | |
|
std::
mask_array
<
T
>
operator
[
]
(
const
std::
valarray
<
bool
>
&
boolarr
)
;
|
(8) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
valarray
<
std::
size_t
>
&
indarr
)
const
;
|
(9) | |
|
std::
indirect_array
<
T
>
operator
[
]
(
const
std::
valarray
<
std::
size_t
>
&
indarr
)
;
|
(10) | |
배열의 단일 요소 또는 일부를 검색합니다.
요소 시퀀스를 반환하는 const 오버로드는 새로운 std::valarray 객체를 생성합니다. const 가 아닌 오버로드는 배열 요소에 대한 참조를 보유하는 클래스를 반환합니다.
|
만약 pos < size ( ) 가 false 인 경우, 동작은 정의되지 않습니다. |
(C++26 이전) |
|
만약 pos < size ( ) 가 false 인 경우:
|
(C++26 이후) |
목차 |
매개변수
| pos | - | 반환할 요소의 위치 |
| slicearr | - | slice 반환할 요소의 슬라이스 |
| gslicearr | - | gslice 반환할 요소의 gslice |
| boolarr | - | 반환할 요소의 마스크 |
| indarr | - | 반환할 요소의 인덱스들 |
반환값
예외
구현 정의 예외를 던질 수 있습니다.
참고 사항
적절한 std::valarray 값 a , b 와 적절한 std::size_t 값 i , j 에 대해, 다음의 모든 표현식은 항상 true 로 평가됩니다:
- 이는 요소들 간에 별칭이 존재하지 않음을 의미하며, 이 속성을 활용하여 특정 종류의 최적화를 수행할 수 있습니다.
참조는
resize()
호출 시 또는 배열이 소멸될 때 무효화됩니다.
오버로드 (3,5,7,9) 의 경우, 이 함수는 반환 타입이 std::valarray 와 다르게 구현될 수 있습니다. 이 경우, 대체 타입은 다음 속성을 가집니다:
-
- const 멤버 함수 전부가 std::valarray 에 제공됩니다.
- std::valarray , std::slice_array , std::gslice_array , std::mask_array 및 std::indirect_array 을 대체 타입으로부터 생성할 수 있습니다.
- const std:: valarray < T > & 을 받는 모든 함수에 대해 begin() 과 end() 를 제외하고 (C++11부터) , 동일한 함수들이 대체 타입들을 받도록 추가되어야 합니다;
- 두 개의 const std:: valarray < T > & 인수를 받는 모든 함수에 대해, const std:: valarray < T > & 과 대체 타입들의 모든 조합을 받는 동일한 함수들이 추가되어야 합니다.
- 반환 타입은 가장 깊이 중첩된 인수 타입을 기준으로 두 단계 이상의 템플릿 중첩을 추가하지 않습니다.
슬라이스/마스크/간접 인덱스 접근은 연쇄적으로 사용할 수 없습니다: v [ v == n ] [ std:: slice ( 0 , 5 , 2 ) ] = x ; 는 오류입니다. 왜냐하면 std::mask_array ( v [ v == n ] 의 타입)가 operator [ ] 를 가지고 있지 않기 때문입니다.
예제
#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 << "초기 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 << "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'; }
출력:
초기 valarray: 0 1 2 3 4 5 6 7 8 9 v[v > 5] = -1 후: 0 1 2 3 4 5 -1 -1 -1 -1
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 389 | C++98 |
오버로드
(1)
의 반환 타입이
T
였음
|
const T & 로 수정됨 |
| LWG 430 | C++98 |
오버로드
(3-10) 에 대해 유효하지 않은 서브셋이 지정된 경우 동작이 불명확했음 |
이 경우 동작은
정의되지 않음 |