std:: slice
|
헤더에 정의됨
<valarray>
|
||
|
class
slice
;
|
||
std::slice
는
std::valarray
의 부분 집합을 식별하는 선택자 클래스로,
BLAS
슬라이스와 유사합니다.
std::slice
타입의 객체는 시작 인덱스, 스트라이드(stride), 그리고 부분 집합에 포함된 값들의 총 개수라는 세 가지 값을 보유합니다.
std::slice
타입의 객체는 valarray의
operator
[
]
와 함께 인덱스로 사용될 수 있습니다.
목차 |
멤버 함수
|
(constructor)
|
slice를 생성함
(public member function) |
|
start
size
stride
|
slice의 매개변수를 반환함
(public member function) |
std::slice:: slice
|
slice
(
)
|
(1) | |
|
slice
(
std::
size_t
start,
std::
size_t
size,
std::
size_t
stride
)
;
|
(2) | |
|
slice
(
const
slice
&
other
)
;
|
(3) | |
새로운 slice를 생성합니다.
매개변수
| start | - | 첫 번째 요소의 위치 |
| size | - | slice 내 요소의 개수 |
| stride | - | slice 내 연속된 요소들 사이의 위치 간격 |
| other | - | 복사할 다른 slice |
std::slice:: start, size, stride
|
std::
size_t
start
(
)
const
;
|
(1) | |
|
std::
size_t
size
(
)
const
;
|
(2) | |
|
std::
size_t
stride
(
)
const
;
|
(3) | |
슬라이스 생성 시 전달된 매개변수 - 각각 start, size, stride를 반환합니다.
매개변수
(없음)
반환 값
슬라이스의 매개변수 - 각각 start, size, stride입니다.
복잡도
상수 시간.
비멤버 함수
|
operator==
(std::slice)
(C++20)
|
두 슬라이스가 동일한지 확인합니다
(함수) |
operator== (std::slice)
|
friend
bool
operator
==
(
const
slice
&
lhs,
const
slice
&
rhs
)
;
|
(C++20 이후) | |
lhs 와 rhs 의 매개변수 - 시작(start), 크기(size), 간격(stride)이 각각 동일한지 확인합니다.
이 함수는 일반적인 비한정(unqualified) 또는 한정(qualified) 조회 에는 보이지 않으며, std::slice가 인자의 연관 클래스일 때에만 인자 의존 조회(argument-dependent lookup) 에 의해 찾을 수 있습니다.
!=
연산자는
합성된(synthesized)
연산자로,
operator==
로부터 생성됩니다.
매개변수
| lhs, rhs | - | 비교할 slice들 |
반환 값
lhs. start ( ) == rhs. start ( ) && lhs. size ( ) == rhs. size ( ) && lhs. stride ( ) == rhs. stride ( )
예제
기본적인 valarray 기반 Matrix 클래스에 trace 계산 함수가 포함되어 있습니다.
#include <iostream> #include <valarray> class Matrix { std::valarray<int> data; int dim; public: Matrix(int r, int c) : data(r*c), dim(c) {} int& operator()(int r, int c) { return data[r * dim + c]; } int trace() const { return data[std::slice(0, dim, dim + 1)].sum(); } }; int main() { Matrix m(3, 3); int n = 0; for (int r = 0; r < 3; ++r) for (int c = 0; c < 3; ++c) m(r, c) = ++n; std::cout << "Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is " << m.trace() << '\n'; }
출력:
Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is 15
결함 보고서
다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 543 | C++98 | 기본 생성된 slice가 사용 가능한지 불분명했음 | 사용 가능함 (빈 부분 집합으로서) |
참고 항목
|
valarray 요소, 슬라이스 또는 마스크 가져오기/설정
(public member function) |
|
|
valarray의 일반화된 슬라이스: 시작 인덱스, 길이 집합, 스트라이드 집합
(class) |
|
|
슬라이스 적용 후 valarray의 부분집합에 대한 프록시
(class template) |
|
|
(C++23)
|
다차원 비소유 배열 뷰
(class template) |