2012-06-05 95 views
1

我得到兩個變量ab,並希望將它們直接添加到數組列表中。我怎樣才能避免定義另一個數組,然後將其推入列表中?C++:如何將數組元素推入數組列表中?

我在找一個類似於以//開頭的行。

最少例如:

#include <list> 
#include <boost/array.hpp> 

using namespace std; 

int main() 
{ 
    cout << endl; 

    /* given values */ 
    int a = 1; 
    int b = 2; 

    /* arrayList contains arrays of integers. */ 
    list<boost::array<int, 2> > arrayList; 

    /* item to add values */ 
    boost::array<int, 2> item; 

    item[0] = a; 
    item[1] = b; 
    arrayList.push_back(item); 

// arrayList.push_back({{a, b}}); 

    cout << arrayList.front()[0] << ", " << arrayList.front()[1] << endl; 

    return 0; 

} 

我克++版本如下: gcc-Version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

編譯(在Eclipse)拋出這樣的警告列爲錯誤: Warnung: erweiterte Initialisierungsliste nur mit -std=c++0x oder -std=gnu++0x verfügbar [standardmäßig aktiviert] main.cpp /testArrayListAndFind line 24 C/C++ Problem 這意味着:Extended initilization list only with ... or ... available.

+0

的答案可以根據您所使用的編譯器的不同而不同。請指定編譯器(還有,C++ 11有'std :: array')。 –

+0

如果你的代碼示例是真正的代碼,考慮切換到'std :: pair'或'std :: tuple'。 –

+0

給定一個C++ 11編譯器,突出顯示的行將按原樣工作:'arrayList.push_back({{a,b}});'''''''編譯器,現在你必須使用一個較老的編譯器。你應該指定是否是這種情況。 – bames53

回答

2

你可以使用boost::assign::list_of如果你沒有C++ 11的支持:

arrayList.push_back(boost::assign::list_of(1)(2)); 
+0

我喜歡這個解決方案,因爲它似乎停留在增強概念中,即使它很長。 我將根據編譯器使用它。 – Lukas

2

是被推到了list的陣列將被創建,問題是你有什麼考慮接受工作/打字你的一部分。

例如,您可以創建一個輔助功能:

boost::array<int, 2> make_array(int a, int b) 
{ 
    boost::array<int, 2> item; 
    item[0] = a; 
    item[1] = b; 
    return item; 
} 

那麼你可以做

arrayList.push_back(make_array(a, b)); 

這是假設你只需要數組中的2個元素。如果是這種情況,您可以使用std::pair<int, int>而不是boost::array<>。否則,你可以實際創建的make_array()

+0

不是'boost :: array'像'std :: array'一樣的POD嗎?你不能只是做'boost :: array item = {{a,b}}; arrayList.push_back(項目);'? –

0

幾個重載,您可以調整名單到你想要的大小,直接在列表中變異的陣列,例如,

arrayList.resize(10); 

for(list::iterator iter = arrayList.begin(); iter != arrayList.end(); ++iter) { 
    (*iter)[0] = <value_a>; 
    (*iter)[1] = <value_b>; 
} 

注意調整大小()在你的例子中調用 boost :: array的構造函數,所以節省的性能會很小。