2010-08-16 29 views
1

我對gslice函數有一些誤解。來自MSDN的定義如下:C++中gslice的定義

gslice定義了valarray的一個子集,它由valarray的多個切片組成,每個valarray切片都從相同的指定元素開始。使用數組來定義多個切片的能力是gslice和slice :: slice之間的唯一區別。第一個切片具有索引爲_StartIndex的第一個元素,由_LenArray的第一個元素指定的元素數量以及由_IncArray的第一個元素指定的步長。下一組正交切片具有由第一切片給出的第一元素。 _LenArray的第二個元素指定元素的數量。步幅由_IncArray的第二個元素給出。切片的第三維將以二維數組的元素作爲起始元素並類似地進行。

因此,假設我有以下代碼。

#include <iostream> 
#include <valarray> 
using namespace std; 
int main(){ 
    valarray<int>v(12),result; 
    valarray<size_t>len(2),interval(2); 
    for (int i=0;i<12;i++) 
     v[i]=i; 
    len[0]=3; 
    len[1]=3; 
    interval[0]=2; 
    interval[1]=3; 
    result=v[gslice(0,len,interval)]; 

    for (int i=0;i< result.size();i++) 
     cout<<result[i]<< " "; 

    return 0; 
} 

據我所知0表示valarray的第一個元素。然後len指示len [0]或3是元素和len [1]之間的距離,或者3是元素的數量。然後interval[0]或2表示下一組的第一個元素和區間[1]。或前體3的距離所以結果應該是這樣的

0 3 6 2 5 8 

它是如此,但這裏有其他元素:

4 7 10 

爲什麼呢?

回答

1

請參閱this description來自cplusplus.com。它包含一個關於該功能實際上在做什麼的圖表。