如何使用不同大小的向量初始化二维向量

4
我希望初始化一个二维向量,其中包含大小不同的向量。已知 2D 向量内 double 数据类型的向量数量以及每个向量的大小。我最初想到的是将每个向量的大小放在一个单独的向量中,并使用 for 循环来初始化代码。然而,我发现这种方法在运行时代价很高,并且希望使用优化的方法。
在头文件中,我已经设置了许多其他向量的大小,但似乎无法确定一种初始化不同大小向量的方法。
std::vector<std::vector<double>> assetWeight = std::vector<std::vector<double>>(10); //initialization of the 2-d vector
for(int i = 0; i < sectorNum; i++){
    assetWeight[i].resize(sectorSize[i]); 
} //current method of setting the individual vector sizes

你真的需要优化它吗?还是这只是你想要做的事情? - skratchi.at
为什么不直接使用一维向量并将其解释为二维向量呢?它还可以从内存局部性中获益。 - khanh
1个回答

1

没有简单的答案。基本上,在我看来,你已经走在了正确的道路上。如果内部的std::vector大小相同,那么就很容易了:

vector< vector<double>> vector2D(ROWS, vector<double>(COLS));

但如果您想设置不同的大小,则需要指定这些大小。这将在运行时使用 std::vector 实现。有很多方法可以做到这一点,例如,在 for 循环中调整大小,或显式调整大小或插入内部的 std::vector

以下是两种可能的解决方案:

    std::vector<std::vector<double>> v1;
    v1.emplace_back(std::vector<double>(3));
    v1.emplace_back(std::vector<double>(4));
    v1.emplace_back(std::vector<double>(5));

    // or 
    std::vector<std::vector<double>> v2(3);
    v2[0].resize(3);
    v2[1].resize(4);
    v2[2].resize(5);

还有许多其他的选择。

如果您需要编译时操作,std::vector 将无法满足您的需求。那么 std::array 可能会成为您的朋友。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接