Неверное значение от valarray<int> после инициализации
Я пытаюсь использовать std::valarray, устанавливая некоторые начальные значения. Распечатывая значения массива, я получаю нечто отличное от того, что я ожидаю. Я на Windows (10) с CodeBlocks (GCC 4.9.2, вариант сборки C++11).
Вот код:
#include <iostream>
#include <string>
#include <valarray>
void print(std::string aname, std::valarray<int> & va)
{
std::cout << aname << "[ ";
for(auto &i : va)
{
std::cout << va[i] << ' ';
}
cout << ']'<< endl;
}
int main()
{
std::valarray<int> one { 1, 0, 0 };
std::valarray<int> two { 0, 1, 0 };
std::valarray<int> three { 0, 0, 1 };
std::cout << std::endl;
print("one", one);
print("two", two);
print("three", three);
return 0;
}
Выход:
one[ 0 1 1 ]
two[ 0 1 0 ]
three[ 0 0 0 ]
1 ответ
Решение
Когда вы используете этот вид для цикла:
for(auto &i : va)
i
получает содержимое va, поэтому правильный способ его отображения:
std::cout << i << ' '; // not va[i]