Namespaces
Variants

std:: slice

From cppreference.net
헤더에 정의됨 <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를 생성합니다.

1) 기본 생성자. slice ( 0 , 0 , 0 ) 와 동일합니다. 이 생성자는 slice 배열의 생성을 허용하기 위해 존재합니다.
2) 매개변수 start , size , stride 를 사용하여 새로운 slice를 생성합니다. 이 slice는 size 개수의 요소를 참조하며, 각 요소의 위치는 다음과 같습니다:
start + 0 * stride
start + 1 * stride
...
start + (size - 1) * stride
3) other 의 복사본을 생성합니다.

매개변수

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)