2013-04-04 36 views
0
int n = 1; 

    //Lines 14 to (vertices+13) read 
    while (i<(vertices+14)) 
    { 
     //First three numbers on each line put into "v1" 
     if (n < 4) 
     { 
      copy(istream_iterator<float>(input), 
      istream_iterator<float>(), 
      back_inserter(v1)); 

      n++; 
     } 

     //Last three numbers on each line put into "v2" 
     else 
     { 
      copy(istream_iterator<float>(input), 
      istream_iterator<float>(), 
      back_inserter(v2)); 
      n++; 

      if (n > 6) 
      { 
       i++;  
       n=1;  
      } 
     } 

這應該是將一行中的前三個數字排序爲一個向量,將最後三個數字排序爲另一個向量。然而,由於我懷疑流的工作原理,所有數字都將進入向量v1,而沒有一個會進入v2。輸入是一個ifstream。在C++中分離流

+0

你誤解了'std :: copy'的作用 - 閱讀文檔。 – 2013-04-04 18:13:08

回答

2

問題出在std::copy如何工作。

第二個參數標記在哪裏停止複製,並且您的參數

istream_iterator<float>() 

代表「年底流的」。 第一個調用copy正在讀取整個流。

使用std::copy_n代替複製一定數量。

從評論:

是否有同樣使用副本的第二個參數來獲得三個數字的一​​種方式?

這正是它的目的。對於某些數字n,如果要複製n值,請使用std::copy_n

+0

'copy_n(inputFile.begin,3,back_inserter(解剖));' 返回 _Unable解決標識copy_n_ 和 _Unable解決標識符begin_ 是否有同樣使用副本的第二個參數的方式拿到三號碼? – user2136754 2013-04-04 18:25:56

+0

@ user2136754我認爲你的代碼應該是'inputFile.begin()'。 – 0x499602D2 2013-04-04 20:04:34