W przykładzie poniżej, wszystkie elementy tablicy zostały przemnożone przez 10, a następnie zostały zsumowane.
#include <iostream> #include <valarray> using namespace std; int main() { std::valarray<int> va{1, 2, 3}; va *= 10; for(const auto& v : va) { cout << v << " "; } cout << endl << va.sum() << endl; }Wynik:
10 20 30 60valarray oferuje jeszcze kilka innych klas pomocniczych m.in. std::slice, podobne do tego znanego z Python-a.
Działanie slice znane z Python-a:
for (i = start; i < end; i += step) append(i)Wersja std::slice w C++. Moim zdaniem mechanizm ten jest mniej wygodny i mniej intuicyjny.
for (i = start, j = 0; j < size; i += step, j++) append(i)std::valarray posiada również mechanizm znany z NumPy jako "Indexing with Boolean Arrays". To akurat działa bez zarzutu.
#include <iostream> #include <valarray> using namespace std; int main() { std::valarray<int> va = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; auto sub_va = std::valarray<int>{va[std::slice{0, va.size()/2, 2}]}; for (const auto& v : sub_va) { cout << v << " "; } cout << endl; va[va > 5] = -1; for (const auto& v : va) { cout << v << " "; } }Wynik:
0 2 4 6 8 0 1 2 3 4 5 -1 -1 -1 -1