2011-09-22 90 views
9

嗨我想初始化一个大小为9的向量,其元素是向量的大小,例如5.我想将所有元素初始化为零向量。初始化一个向量的向量<doubles> C++

这是正确的吗?

vector<double> z(5,0); 

vector< vector<double> > diff(9, z); 

或者有没有更简单的方法来做到这一点?

+1

这是创建2D矢量的正确方法。你只是稍微冗长一点而已。 – 2011-09-22 17:54:58

+2

这个9x5尺寸是固定的吗? –

+0

是的,我知道之前的大小。只是选择了9和5作为这个问题的一些随机整数。 – smilingbuddha

回答

12

你可能做到这一点在单行:

vector<vector<double> > diff(9, vector<double>(5)); 

您可能还需要考虑使用boost::multi_array更高效的存储和访问(避免了双指针间接)。

+1

或者,45个元素的矢量跨度访问也可能足以... –

+2

'矢量(5)'足够。 'vector (5,0)'不是必需的,只要第二个参数是'0'即可。 – Nawaz

4

很肯定这将工作:

vector< vector<double> > diff(9, vector<double>(5,0)); 
5

你可以把它们都放在一个行:

vector<vector<double>> diff(9, vector<double>(5)); 

这就避免了未使用的局部变量。

(在预C++ 11个编译器,你需要留出空间,> >。)你使用

+0

小心语法中的“>>”。有些编译器需要这些符号之间的空格。 – riwalk

+3

@ Stargazer712这些编译器不再符合! :P –

+2

@ R.MartinhoFernandes,符合与否,它们存在:) – riwalk

5

vector< vector<double> > diff(9, std::vector<double>(5, 0));

但是在具体情况下大小在编译时已知C数组:

double diff[9][5] = { { 0 } };

4

如果大小是固定的,你可以用std::array而不是去:

std::array<std::array<double,5>,9> diff = {}; 
+1

它也取决于范围的大小。 'std :: array'将所有内容保留在本地范围内,所以如果该数组太大,可能会触发一些名称让我感到失望的错误。 –

+0

堆栈溢出? –