2014-10-29 75 views
0

我知道如何初始化一個默認值爲「val」的向量。如何初始化矢量數組?

vector <int> v(size,val); 

但我想初始化矢量陣列,其中具有默認值「VAL」 .....,或者如果可能的不同值中的每個矢量。

聲明:

vector <int> v[10]; 
+0

你在用什麼語言? – 2014-10-29 06:33:35

+0

@ Adam Smith C++ – unlucy7735 2014-10-29 06:34:34

+0

'vector v [10] = { {1,2,3}, {4,5,6},/ *其餘*/ };'? – Niall 2014-10-29 06:39:48

回答

0

我知道了.... 存在另一種方式了。 創建具有默認值「VAL」給定大小的二維矢量:

int N, N; 
// ... 
vector< vector<int> > Matrix(N, vector<int>(M, VAL)); 
+0

該矩陣效率非常低。嵌套矢量默認內存佈局會影響性能。也就是說,如果是爲了學習目的,這就夠了。 – 2014-10-29 06:56:44

+0

@GermánDiago真。事實上,這種矢量陣列在這方面已經非常低效。 – juanchopanza 2014-10-29 07:00:28

0

一個使用C++ 11,你不需要重複寫矢量構造更寬泛的版本。它返回的std ::陣列

template <unsigned N> 
auto make_array_of_vecs(std::size_t size, int val) { 
    std::array<std::vector<int>, std::index_sequence<I...>::size()> arr; 
    std::fill(begin(arr), end(arr), std::vector<int>(size, val)); 

    return arr; 
} 

如何使用:

auto array_of_vecs = make_array_of_vecs<10>(15, 10); 

警告:未經測試。

+1

您必須使用'I'來讓編譯器擴展'...',類似'return {{(I,std :: vector (size,val))...}};' – Jarod42 2014-10-29 08:20:56

+0

正確, :) – 2014-10-29 08:42:31