2012-09-03 90 views
4

我想將數組的內容寫入向量中。將int數組的內容寫入向量中

int A[]={10,20,30,40,50,60,70,80,90}; 
vector<int> my_vector; 

前面我用於陣列的內容複製到使用的memcpy另一個數組。我想用my_vector代替陣列

如何寫陣列一個成一次性my_vector的內容,而沒有for循環?

+6

if C++ 11'vector my_vector(std :: begin(A),std :: end(A));' –

+0

@ Mr.Anubis謝謝你.. :) –

+1

@ Mr.Anubis發貼者爲一個答案,所以我可以給它合理的upvote它應得的和ajaybidari可以接受它:-) – oldrinb

回答

3

您可以使用memcpy,或在C++ 98/03中使用這種初始化。

int A[]={10,20,30,40,50,60,70,80,90}; 
vector<int> my_vector(A, A + sizeof(A)/sizeof(*A)); 

也可以使用算法,如copy

std::copy(A, A + sizeof(A)/sizeof(*A), std::back_inserter(my_vector)); 

在C++ 11,使用std::begin(A)std::end(A)表示開始和陣列的端部。

+0

不要使用'memcpy'。 –

4
#include <algorithm> 
#include <vector> 

int main() { 
    int A[]={10,20,30,40,50,60,70,80,90}; 
    std::vector<int> my_vector; 
    unsigned size = sizeof(A)/sizeof(int); 
    std::copy(&A[0],&A[size],std::back_inserter(my_vector)); 
} 

C++ 11簡單得多。

#include <vector> 
#include <algorithm> 

int main() { 
    int A[]={10,20,30,40,50,60,70,80,90}; 
    std::vector<int> my_vector(std::begin(A),std::end(A)); 
} 
6

使用C++ 2011要使用

std::copy(std::begin(A), std::end(A), std::back_inserter(my_vector)); 

...或

std::vector<int> my_vector(std::begin(A), std::end(A)); 

...或者,實際上是:

std::vector<int> my_vector({ 10, 20, 30, 40, 50, 60, 70, 80, 90 }); 

如果你不」沒有C++ 2011,你想定義

namespace whatever { 
    template <typename T, int Size> 
    T* begin(T (&array)[Size]) { return array; } 
    template <typename T, int Size> 
    T* end(T (&array)[Size]) { return array + Size; } 
} 

和使用whatever::begin()whatever::end()連同前兩種方法之一。

+0

爲了完整性,在你的回答中可能值得一提的是其中一些是初始化,但是'std :: copy'用於複製到現有的向量中。 – juanchopanza