2010-05-19 67 views
1

填補載體,我想在命令行中填寫我的vector<float>C++:從管道

more my.txt | myexe.x > result.txt 

什麼是C++來打開管道的最佳方法?感謝 阿爾曼。

回答

10

您的shell將標準輸出more連接到標準輸入myexe.x。所以你可以從std::cin中讀取,不用擔心輸入是來自鍵盤還是其他程序。

例如:

vector<float> myVec; 
copy(istream_iterator<float>(cin), istream_iterator<float>(), 
    back_inserter(myVec)); 
+0

感謝托馬斯,但怎麼樣的輸入端?我應該檢查結束EOF?或者是什麼? – Arman 2010-05-19 17:04:02

+2

@arman - istream_iterator ()表示輸入結束。 – 2010-05-19 17:09:43

2

這個特定的管道連接到您的應用程序的標準輸入,這樣就可以剛剛從那裏讀取。

4

您可以使用<algorithm>std::copy()來實現,但不需要額外的依賴關係。

#include<iterator> 

// ... 
std::vector<float> them_numbers(std::istream_iterator<float>(std::cin), 
           std::istream_iterator<float>()); 

如果你事先知道你究竟有多少價值的預期,您可避免重新分配:

std::vector<float>::size_type all_of_them /* = ... */; 
std::vector<float> them_numbers(all_of_them); 
them_numbers.assign(std::istream_iterator<float>(std::cin), 
        std::istream_iterator<float>()); 
+0

謝謝,很好的注意。 – Arman 2010-05-20 05:27:09