2009-01-18 193 views
5

我有我想要在我的應用程序上實現的一個步驟的示例程序。我想分別將字符串的int元素push_back到一個向量中。我怎麼能夠?從字符串到字符串流到矢量<int>

#include <iostream> 
#include <sstream> 

#include <vector> 

using namespace std; 

int main(){ 

    string line = "1 2 3 4 5"; //includes spaces 
    stringstream lineStream(line); 


    vector<int> numbers; // how do I push_back the numbers (separately) here? 
    // in this example I know the size of my string but in my application I won't 


    } 

回答

12
int num; 
while (lineStream >> num) numbers.push_back(num); 
25

這是std::back_inserter一個典型的例子。

copy(istream_iterator<int>(lineStream), istream_iterator<int>(), 
    back_inserter(numbers)); 

您可以直接從一開始創建的載體,如果你想

vector<int> numbers((istream_iterator<int>(lineStream)), 
        istream_iterator<int>()); 

記得把周圍的第一個參數的括號。編譯器認爲這是一個函數聲明,否則。如果你使用向量來獲得數字的迭代器,你可以直接使用istream迭代器:

istream_iterator<int> begin(lineStream), end; 
while(begin != end) cout << *begin++ << " "; 
+1

這是一個完美的例子,用於C++最新的錯誤。在幾乎所有其他語言中,這將是對''的分割,然後是每個元素的.toInt()。相反,我們正在應用一系列非常複雜的模板化算法。 – dicroce 2009-01-18 17:39:49