2016-10-08 3 views
0

나는 입력이 개 번호 (INT)와 2 개 벡터 (INT, 문자열) 시도 방법 :입력 INT, INT, INT 및 문자열의 벡터의 벡터에 제대로

int N_num; 
    int N_dir; 
    vector<int> v; 
    vector<string> v1; 
    std::cin >> N_num; 
    std::copy(std::istream_iterator<int>(std::cin), 
     std::istream_iterator<int>(),std::back_inserter(v)); 
    std::cin >> N_dir; 
    std::copy(std::istream_iterator<string>(std::cin), 
     std::istream_iterator<string>(), std::back_inserter(v1)); 

내 입력은 다음과 같습니다

3 
1 4 5 
4 
T M M R 

그럼 N_dir (= 4)을 입력하고 -858993460을 출력으로 가져옵니다. 내 생각 엔 N_dir에 "4"를 입력하면 첫 번째 벡터 입력이 종료되지 않습니다. 벡터 입력을 중단하고 다음 변수로 이동하려면 어떻게해야합니까?

답변

0

문제는 첫 번째 std::copy 호출이 N_dir으로 읽어야하는 4을 읽습니다. 따라서 N_dir을 읽을 때 첫 번째 문자열을 읽으면 입력 작업이 실패하고 N_dir이 초기화되지 않고 불확정 상태가됩니다. 대신

사용 std::copy_n :

std::copy_n(std::istream_iterator<int>(std::cin), N_num, 
      std::back_inserter(v)); 
+0

감사합니다! 그것은 작동합니다 :) – Kate