mask_array ---> valarray
От: gencoder  
Дата: 03.03.17 14:09
Оценка:
Как заставить компилятор понимать выражения в 4 и 6 для x и y как valarray, а не как mask_array?
std::valarray<float> x = {1,2,3,4,22,1}; // 1
std::valarray<float> y = {1,2,3,4,5,6}; // 2
x[y<3.f]=1.f; // 3 - ok
x[y<3.f]*=0.5f; // 4 - error: no match for ‘operator*=’ (operand types are ‘std::mask_array<float>’ and ‘float’)
x[y<3.f]=y[y<3.f]; // 5 - ok
x[y<3.f]=2.f*y[y<3.f]; // 6 - error: no match for ‘operator*’ (operand types are ‘float’ and ‘std::mask_array<float>’)



P.S.

в 4 было задумано все элементы массива x с индексами idx=y<3 умножить на 0.5,

в 6 всем элементам массива х с индексами idx=y<3 присвоить 2*y[idx]
cpp stl
Re: mask_array ---> valarray
От: LaptevVV Россия  
Дата: 06.03.17 03:30
Оценка:
Джоссатис в своей книжке по STL пишет, что классы valarray спроектированы плохо,
люди, которые их делали, давно ушли из проекта.
Поэтому он их в книжке не описывает и не рекомендует их использовать.
Можно посмотреть в первом издании книжки — в сети валяется pdf.
На странице cppstdlib.com есть на английском подробности про valarray.
Слева там меню и там пункт: supplementary chapter.
Открывается pdf, где и описано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: mask_array ---> valarray
От: gencoder  
Дата: 06.03.17 07:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>На странице cppstdlib.com есть на английском подробности про valarray.

LVV>Слева там меню и там пункт: supplementary chapter.

Спасибо, информации в книгах действительно мало ...

P.S.
С вопросом, решение такое:
   
std::valarray<float> x = {1,1,1,1}; 
std::valarray<float> y = {1,2,3,4}; 
std::valarray<float> ones_likes_y(1.,y.size());
x[y<3.f]*=0.5f*ones_likes_y;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.