2014-10-29 74 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