2017-09-20 3 views
0

일부 초기 값을 설정하여 std :: valarray를 사용하려고합니다. 배열 값을 인쇄하면 예상과 다른 결과를 얻습니다. CodeBlocks (GCC 4.9.2, C++ 11 빌드 옵션)가있는 Windows (10)입니다.초기화 후 valarray <int>의 값이 잘못되었습니다.

#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 ] 

답변

2

당신은 루프에 대한 이런 종류의 사용할 때 :

for(auto &i : va) 

i는 버지니아의 내용을 수신을, 올바른 방법은 다음과 같습니다.

std::cout << i << ' '; // not va[i] 
+0

감사합니다. Amadeus, 작동합니다! – Sergio

관련 문제