Namespaces
Variants

std::valarray<T>::operator=

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가 비-사소한 소멸자를 가진 경우 선형적일 수 있지만, 그렇지 않으면 일반적으로 상수입니다.
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 의 크기를 조정했음
이 경우 크기 조정이
요구되지 않음