Namespaces
Variants

std::gslice

cppreference.net에서
 
 
 
 
헤더 <valarray>
class gslice;

std::gslice에 정의됨. 은 다중 수준의 보폭 및 크기 집합으로 정의된 std::valarraystd::gslice 인덱스의 부분 집합을 식별하는 선택기 클래스입니다. operator[] 유형의 객체는 valarray의 valarray 연산자와 함께 사용하여

로 표현된 다차원 배열의 열 등을 선택할 수 있습니다. 시작 값 s, 보폭 목록 ij, 크기 목록 djstd::gslice가 주어지면, 이 값들로 생성된 는 인덱스 집합 kj=s+Σj(ijdj)

를 선택합니다. 3예를 들어, 시작 인덱스 {19,4,1, 보폭 {2,4,3}, 길이 24=2*4*3}를 사용하는 gslice는 다음과 같은

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

인덱스 집합을 생성합니다: std::gslice일부 인덱스를 두 번 이상 선택하는 {1,1,1} 객체를 구성하는 것이 가능합니다: 위 예제에서 보폭이 {3, 4, 5, 4, 5, 6, ...}인 경우, 인덱스는 std::valarray::operator[]이 됩니다. 이러한 gslice는

멤버 함수

(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)