У меня есть некоторые недоразумения относительно функции gslice
. Определение из состояний MSDN:определение gslice в C++
gslice определяет подмножество 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
А почему?