2010-08-16 3 views
1

У меня есть некоторые недоразумения относительно функции 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 

А почему?

ответ

1

См. this description с сайта cplusplus.com. Он содержит диаграмму о том, что фактически выполняет функция.

Смежные вопросы