我有一个类有一个三维向量作为它的变量之一。这个向量的大小要到运行时才能知道。有没有一个有效的方法来初始化这个矢量?
例如,我的类可能是
class Foo {
public:
std::vector<std::vector<std::vector<float>>> x;
std::vector<std::vector<std::vector<float>>> y;
std::vector<std::vector<std::vector<float>>> z;
std::vector<std::vector<std::vector<float>>> bar;
int ni;
int nj;
int nk;
}
使用构造函数
Foo::Foo(std::vector<std::vector<std::vector<float>>> x_,
std::vector<std::vector<std::vector<float>>> y_,
std::vector<std::vector<std::vector<float>>> z_) {
x = x_;
y = y_;
z = z_;
ni = x.size();
nj = x[0].size();
nk = x[0][0].size();
std::vector<std::vector<std::vector<float>>> tmp(ni, std::vector<std::vector<float>>(nj, std::vector<float>(nk)));
bar = tmp;
}
我可以在不赋值虚拟变量tmp
的情况下完成上面的最后两行吗?
您可以使用resize()
和几个for循环来设置bar
。这不是最漂亮的解决方案,但它应该有相当好的性能,因为没有创建临时任务,也没有不必要的分配。那看起来就像
bar.resize(ni);
for(auto& twodee : bar)
{
twodee.resize(nj);
for(auto& onedee : twodee)
onedee.resize(nk);
}
现在`bar的大小相同,并且用0填充。