2013-07-08 14 views
1

我有一個整數數組,如下所示:從int []列出<int>轉換:任何更好的方式

int ia[] = {1, 2, 3, 4, 5, 6}; 

我想將其轉換爲一個list<int>vector<int>。這使我想到的明顯的方法是遍歷數組了,和元素添加到list<int>vector<int>

for (auto val: ia) { 
    ilist.push_back(val); 
    ivec.push_vack(val); 
} 

我只是想知道,是否有任何其他的方式,可能是任何可用的庫函數?

+3

順便說一句,'性病:: list'很少是正確的容器。乍一看,它看起來像「當你只需要迭代時應該使用的順序容器」,它實際上是「當你需要迭代器長期保持時,或者在你做更多數量級的插入時使用的順序容器/刪除在中間比你做迭代「。與'std :: vector'相比,它在性能和功能方面都很糟糕 - 它使用更多內存,速度更慢。 – Yakk

+0

感謝@yakk提供寶貴的建議。請記住:) –

回答

11

您可以使用兩個迭代器的構造函數:

std::list<int> ilist(std::begin(ia), std::end(ia)); 
std::vector<int> ivec(std::begin(ia), std::end(ia)); 

如果你沒有爲std::beginstd::end C++ 11的支持,您可以使用

std::list<int> ilist(ia, ia + 6); 

凡在真正的代碼你的目標是提供一個數組長度函數,而不是明確地使用6

更妙的是,你可以角色你自己beginend函數模板,例如

template< class T, std::size_t N > 
T* my_end(const T (&a)[N]) 
{ 
    return &a[N]; 
} 

編輯這裏是一個數組長度的函數模板:

template< class T, size_t N > 
std::size_t size(const T (&)[N]) 
{ 
    return N; 
} 
+1

我*是*關閉:) – chris

+0

@ juanchopanza。天哪。我正在尋找這個。只是不知道如何獲得內置數組的迭代器。謝謝:)在接受它之前,會等待一些其他選項。 –

+1

@juanchopanza我建議你使用'ia + sizeof(ia)/ sizeof(ia [0])'而不是硬編碼的長度。 – 2013-07-08 18:55:19

相關問題