Namespaces
Variants

std:: gslice

From cppreference.net
헤더에 정의됨 <valarray>
class gslice ;

std::gslice 는 다중 수준의 간격(stride)과 크기로 정의된 std::valarray 인덱스의 부분 집합을 식별하는 선택자 클래스입니다. std::gslice 타입의 객체는 valarray의 operator [ ] 와 함께 인덱스로 사용되어, 예를 들어 valarray 로 표현된 다차원 배열의 열을 선택하는 데 사용할 수 있습니다.

시작 값 s , 스트라이드 목록 i j 및 크기 목록 d j 가 주어졌을 때, 이러한 값들로부터 생성된 std::gslice 는 다음 인덱스 집합을 선택합니다: k j =s+Σ j (i j d j ) .

예를 들어, 시작 인덱스가 3 , 스트라이드가 {19,4,1 } 그리고 길이가 {2,4,3 }인 gslice는 다음과 같은 24=2*4*3 개의 인덱스 집합을 생성합니다:

3 + 0 * 19 + 0 * 4 + 0 * 1 = 3 ,
3 + 0 * 19 + 0 * 4 + 1 * 1 = 4 ,
3 + 0 * 19 + 0 * 4 + 2 * 1 = 5 ,
3 + 0 * 19 + 1 * 4 + 0 * 1 = 7 ,
3 + 0 * 19 + 1 * 4 + 1 * 1 = 8 ,
3 + 0 * 19 + 1 * 4 + 2 * 1 = 9 ,
3 + 0 * 19 + 2 * 4 + 0 * 1 = 11 ,
...
3 + 1 * 19 + 3 * 4 + 1 * 1 = 35 ,
3 + 1 * 19 + 3 * 4 + 2 * 1 = 36

**번역 결과:** 해당 내용은 수학 연산식으로 구성되어 있으며, HTML 태그 내에 포함된 코드( )로 식별되어 번역에서 제외됩니다. 모든 텍스트가 ,
,  태그와 동등한 취급을 받는 C++ 코드 영역에 포함되어 있으므로 원문을 그대로 유지합니다.

동일한 인덱스를 여러 번 선택하는 std::gslice 객체를 생성할 수 있습니다: 위 예제에서 스트라이드를 {1,1,1} 로 사용했다면, 인덱스는 {3, 4, 5, 4, 5, 6, ...} 와 같았을 것입니다. 이러한 gslice는 std::valarray::operator[] 의 const 버전 인자로만 사용할 수 있으며, 그렇지 않을 경우 동작이 정의되지 않습니다.

목차

멤버 함수

(constructor)
제네릭 슬라이스를 생성합니다
(public member function)
start size stride
슬라이스의 매개변수를 반환합니다
(public member function)

std::gslice:: gslice

gslice ( )
(1)
gslice ( std:: size_t start, const std:: valarray < std:: size_t > & sizes,
const std:: valarray < std:: size_t > & strides ) ;
(2)
gslice ( const gslice & other ) ;
(3)

새로운 일반 슬라이스를 생성합니다.

1) 기본 생성자. gslice ( 0 , std:: valarray < std:: size_t > ( ) , std:: valarray < std:: size_t > ( ) ) 와 동일합니다. 이 생성자는 슬라이스 배열의 생성을 허용하기 위해 존재합니다.
2) 매개변수 start , sizes , strides 로 새로운 슬라이스를 생성합니다.
3) other 의 복사본을 생성합니다.

매개변수

start - 첫 번째 요소의 위치
sizes - 각 차원의 요소 수를 정의하는 배열
strides - 각 차원에서 연속된 요소 사이의 위치 간격을 정의하는 배열
other - 복사할 다른 슬라이스


std::slice:: start, size, stride

std:: size_t start ( ) const ;
(1)
std:: valarray < std:: size_t > size ( ) const ;
(2)
std:: valarray < std:: size_t > stride ( ) const ;
(3)

슬라이스 생성 시 전달된 매개변수 - 각각 시작 위치, 크기, 스트라이드를 반환합니다.

매개변수

(없음)

반환 값

슬라이스의 매개변수 - 각각 시작 위치, 크기, 스트라이드입니다.

복잡도

상수 시간.

예제

3차원 배열의 열을 주소 지정하기 위한 gslice 사용법을 보여줍니다:

#include <iostream>
#include <valarray>
void test_print(std::valarray<int>& v, int planes, int rows, int cols)
{
    for (int r = 0; r < rows; ++r)
    {
        for (int z = 0; z < planes; ++z)
        {
            for (int c = 0; c < cols; ++c)
                std::cout << v[z * rows * cols + r * cols + c] << ' ';
            std::cout << "  ";
        }
        std::cout << '\n';
    }
}
int main()
{
    std::valarray<int> v = // 3d array: 2 x 4 x 3 elements
        {111,112,113 , 121,122,123 , 131,132,133 , 141,142,143,
         211,212,213 , 221,222,223 , 231,232,233 , 241,242,243};
    // int ar3d[2][4][3]
    std::cout << "Initial 2x4x3 array:\n";
    test_print(v, 2, 4, 3);
    // update every value in the first columns of both planes
    v[std::gslice(0, {2, 4}, {4 * 3, 3})] = 1; // two level one strides of 12 elements
                                               // then four level two strides of 3 elements
    // subtract the third column from the second column in the 1st plane
    v[std::gslice(1, {1, 4}, {4 * 3, 3})] -= v[std::gslice(2, {1, 4}, {4 * 3, 3})];
    std::cout << "\n" "After column operations:\n";
    test_print(v, 2, 4, 3);
}

출력:

Initial 2x4x3 array:
111 112 113   211 212 213
121 122 123   221 222 223
131 132 133   231 232 233
141 142 143   241 242 243
After column operations:
1 -1 113   1 212 213
1 -1 123   1 222 223
1 -1 133   1 232 233
1 -1 143   1 242 243

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 543 C++98 기본 생성된 generic slice가 사용 가능한지 불분명했음 사용 가능함 (빈 부분 집합으로서)

참고 항목

valarray 요소, 슬라이스 또는 마스크 가져오기/설정
(public member function)
BLAS 방식의 valarray 슬라이스: 시작 인덱스, 길이, 스트라이드
(class)
gslice 적용 후 valarray의 부분 집합에 대한 프록시
(class template)