Инициализация двух массивов std::valarray в std::pair

Рейтинг: 1Ответов: 1Опубликовано: 14.01.2023
#include <valarray>


int main()
{
    const int length = 5;
    typedef std::valarray<int> ArrayInt;
    std::pair<ArrayInt, ArrayInt> PairArray;
    PairArray.first = ;
    PairArray.second = ;



    return 0;
}

Хочу инициализировать два массива valarray, созданные в std::pair. Объекты класса valarray можно инициализировать так: std::valarray my_arr(0, length), что означает инициализацией нулями 5 элементов массива

Но я не могу так сделать через обращения к объектам класса pair PairArray.first(...) PairArray.second(...)

Почему?

Ответы

▲ 2Принят
//например
std::pair PairArray{ ArrayInt(length), ArrayInt(length) };
PairArray.first = ArrayInt(4, length); //четверки
/*если хотите нули, то это  значение по умолчанию, потому 
нет необходимости его передавать _ просто  ArrayInt(length)*/
//можете также по разному получать ArrayInt. Например
//списком инициализации
PairArray.second = { 7, 7, 7, 7, 7 }; 
//или генерировать значения функцией
PairArray.second = (PairArray.first).apply([](int k) {return /*something*/; });

Или иначе. Главное получить std::valarray<int> или std::slice_array<int> или std::gslice_array<int> или std::mask_array<int> или std::initializer_list<int> в правом операнде