std::valarray<T>:: operator=
From cppreference.net
|
valarray
<
T
>
&
operator
=
(
const
valarray
<
T
>
&
other
)
;
|
(1) | |
|
valarray
<
T
>
&
operator
=
(
valarray
<
T
>
&&
other
)
noexcept
;
|
(2) | (C++11 이후) |
|
valarray
<
T
>
&
operator
=
(
const
T
&
val
)
;
|
(3) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
slice_array
<
T
>
&
other
)
;
|
(4) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
gslice_array
<
T
>
&
other
)
;
|
(5) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
mask_array
<
T
>
&
other
)
;
|
(6) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
indirect_array
<
T
>
&
other
)
;
|
(7) | |
|
valarray
<
T
>
&
operator
=
(
std::
initializer_list
<
T
>
il
)
;
|
(8) | (C++11 이후) |
숫자 배열의 내용을 대체합니다.
1)
복사 할당 연산자. 만약
size
(
)
!
=
other.
size
(
)
라면, 먼저
*
this
를
resize
(
other.
size
(
)
)
와 같은 방식으로 크기를 조정합니다.
*
this
의 각 요소는
other
의 해당 요소 값으로 할당됩니다.
2)
이동 할당 연산자.
*
this
의 내용을
other
의 내용으로 대체합니다. 이 연산 이후
other
의 값은 지정되지 않습니다. T가 non-trivial 소멸자를 가진 경우 이 연산의 복잡도는 선형일 수 있지만, 그렇지 않은 경우 일반적으로 상수입니다.
3)
*
this
의 각 값을
val
의 복사본으로 대체합니다.
4-7)
*
this
의 내용을 일반화된 첨자 연산의 결과로 대체합니다.
size()
가
other
의 길이와 같지 않거나 왼쪽의 값이 오른쪽 값에 의존하는 경우(예:
v
=
v
[
v
>
2
]
) 동작은 정의되지 않습니다.
8)
초기화자 목록
il
의 내용을 할당합니다.
*
this
=
valarray
(
il
)
와 동등합니다.
목차 |
매개변수
| other | - | 할당할 다른 숫자 배열(또는 마스크) |
| val | - | 각 요소를 초기화할 값 |
| il | - | 할당할 초기화자 리스트 |
반환값
* this
예외
1,3-8)
구현 정의 예외를 발생시킬 수 있습니다.
예제
이 코드 실행
#include <iomanip> #include <iostream> #include <valarray> void print(const char* rem, const std::valarray<int>& v) { std::cout << std::left << std::setw(36) << rem << std::right; for (int n : v) std::cout << std::setw(3) << n; std::cout << '\n'; } int main() { std::valarray<int> v1(3); v1 = -1; // (3) 스칼라에서 할당 print("스칼라에서 할당: ", v1); v1 = {1, 2, 3, 4, 5, 6}; // (8): 다른 크기의 초기화자 목록에서 할당 print("initializer_list에서 할당:", v1); std::valarray<int> v2(3); v2 = v1[std::slice(0, 3, 2)]; // (4): 슬라이스 배열에서 할당 print("위치 0부터 시작하는 2번째 요소마다:", v2); v2 = v1[v1 % 2 == 0]; // (6): 마스크 배열에서 할당 print("짝수인 값들:", v2); std::valarray<std::size_t> idx = {0, 1, 2, 4}; // 인덱스 배열 v2.resize(4); // 일반 첨자에서 할당할 때 크기가 일치해야 함 v2 = v1[idx]; // (7): 간접 배열에서 할당 print("위치 0, 1, 2, 4의 값들:", v2); }
출력:
스칼라에서 할당: -1 -1 -1 initializer_list에서 할당: 1 2 3 4 5 6 위치 0부터 시작하는 2번째 요소마다: 1 3 5 짝수인 값들: 2 4 6 위치 0, 1, 2, 4의 값들: 1 2 3 5
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 624 | C++98 |
(4-7)
오버로드의 동작이
other 의 길이가
size()
와 다를 경우 불명확했음
|
이 경우 동작이
정의되지 않음 |
| LWG 630 | C++98 |
복사 할당 연산자의 동작이
size ( ) ! = other. size ( ) 일 경우 정의되지 않았음 |
이 경우
*
this
를
먼저 크기 조정함 |
| LWG 2071 | C++11 |
이동 할당 연산자가
size ( ) ! = other. size ( ) 일 때 * this 의 크기를 조정했음 |
이 경우 크기 조정이
요구되지 않음 |