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