我對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
爲什麼呢?