2010-04-29 2 views
-1

는 부스트 예입니다랜덤 액세스보기 :: 다음 multi_array

이 코드는 원래 배열 상에 부분 배열 또는 뷰 매핑을 만드는 무엇
typedef boost::multi_array<double, 1> array_type; 
    typedef array_type::index index; 
    array_type A(boost::extents[100]); 

    for(index i = 0; i != A.size(); ++i) { 
     A[i] = (double)i; 
    } 

    // creating view 
    array_type::index_gen indices; 
    typedef boost::multi_array_types::index_range range; 

    array_type::array_view<1>::type myview = A[ indices[range(0,50)] ]; 

. 이보기는 연속적이며 원본 배열의 0 번째부터 50 번째까지를 포함합니다.

보기에 표시하고 싶은 요소를 명시 적으로 정의해야하는 경우 어떻게해야합니까? 어떻게 [1, 5, 35, 23]과 같은 인덱스를 가진 뷰를 생성 할 수 있습니까? 어떤 아이디어?

+0

1 차원의 다중 배열에 제약이 있습니까? –

+0

단순한 예제를 사용하여 개념적 사안을 논의하는 것이 훨씬 쉽습니다. 1 dimension that for good) boost :: vector 나 boost :: array에서 view-approach 같은 것이 있습니까? –

답변

0

코드에 간접 참조를 추가하는 것 외에는 아무 것도 할 수 없다고 생각합니다. a [b [i]] 여기서 b [i]는 [1,5,35,23]과 같은 것을 포함합니다. AFAIK, MultiArray 개념은 잘 정의 된 지속적인 보폭이 필요합니다.

+0

예, 이것은 매우 간단 합니다만, 좋지 않습니다. multy_arrays와 함께이 모든 오버 헤드 된 것을 사용해야 할 필요가 있습니다. 그렇다면 이것을 단순한 C 스타일의 배열로 사용할 것입니까? :) –

+0

충분하지만, C 스타일 배열의 뷰를 만드는 방법을 잘 모르겠다. 여기서 인덱스 {0,1,2,3}는 {1,5,35,23} 오프셋에 액세스하지 않고 오프셋에 액세스합니다. [b [i]] - 간접적 인 표현. –

0

좋은 기능인 것처럼 보입니다. Boost.MultiArray가 이것을 지원한다고 생각하지 않지만, Boost ML에서 요청하는 것이 좋습니다. 대신 index_range 우리 범위를 인덱스의 매핑의 (공 영역)을 제공하는 가변 기능 열거 정의에 생각할 수 생성 범위를 사용

열거 (1, 5, 35, 23) 매핑됩니다 (0, 1, 2, 3)

로보기는

ARRAY_TYPE :: index_gen 지표로 선언 될 수있다; typedef boost :: multi_array_types :: index_enumeration_map 열거; // index_enumeration_map은 MultiArray의 일부가 아닙니다.

array_type :: array_view < 1> :: 유형 myview = A [인덱스 [열거 (1, 5, 35, 23)];

물론 이것은 MultiArray가 인덱스를 관리하는 방식에 약간의 수정이 필요합니다.