Namespaces
Variants

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 의 크기를 조정했음
이 경우 크기 조정이
요구되지 않음