Некоторые из проблем с кодом:
valarray
не имеют те же обозначения, что и обычные массивы: valarray<int> v[5];
объявляет 5 различных valarray
объекты и помещает их в массив C-стиле. Нотация, которую вы ищете, это valarray<int> v(10);
- Избавьтесь от строки
int v %= 13;
: это переопределяет v (массив) как целое число.
- Используйте для расчета
v[i]=(array[i]%13);
, что у вас нет смысла.
- Затем выход
cout << v[i] << " "
;
Кроме того, вы на самом деле не с помощью какой-либо из особенностей valarray
, так что он может сделать больше смысла просто использовать один массив, как:
#include <iostream>
using namespace std;
// to get new card number
int main()
{
int array[5]= {10,2,6,34,51};
for (int i=0; i<5 ; i++) {
array[i]%=13;
cout << array[i] << " ";
}
}
Edit: по слову, классная вещь о valarray
здесь заключается в том, что вы можете применить одну и ту же функцию к каждому значению сразу. Как это:
#include <iostream>
#include <valarray>
using namespace std;
int main() {
valarray<int> v(10);
for (int i=0;i<10;++i) {
v[i]=i*i; //Fill the array with 0,1,4,9,16,... as an example
}
v%=13; //This applies the modulo 13 on the whole array at once.
for (int i=0;i<10;++i) {
cout << v[i] << endl;
}
}
Вы должны получить ошибку компиляции из кода вы показать, где вы * Переопределение * переменная 'V', а также использовать нелегальный оператор инициализации для него. Это, в свою очередь, может привести к большему количеству ошибок в цикле. Кроме того, вы не объявляете объект 'valarray' с пятью элементами, вы объявляете массив из пяти объектов valarray ', каждый из которых содержит нулевые элементы. Наконец, разве вы не должны использовать 'array' вместо этого? И только оператор modulo '%', а не оператор modulo-assign? –