【问题标题】:How to get the size of each dimension in a vector<vector<array<double, 2>>> construct?如何获取 vector<vector<array<double, 2>>> 构造中每个维度的大小?
【发布时间】:2019-10-16 09:34:11
【问题描述】:

我有以下构造。

一个数组arr:

std::array<double, 2> val;

我通过push_back()将它放入向量中

std::vector<std::array<double, 2>> innerVec;
for(int i=0; i<number1; i++){
   innerVec.push_back(val);
}

再一次,我把这个内部向量放到了一个外部向量中:

std::vector<std::vector<std::array<double, 2>>> outerVec;
for(int i=0; i<number2; i++){
   outerVec.push_back(innerVec);
}

问题是,我怎样才能得到innerVec 的大小(实际上是number1)? 与

outerVec[0].size();

它返回2*number1,这可能是因为val 有2 个条目,而size() 返回内部向量中的元素数。

【问题讨论】:

  • 我不相信你。发布minimal reproducible example
  • 仅考虑您显示/暗示的代码,outerVec[0].size() 应该返回 number1。否则,您的程序中有错误(我们只能在您展示程序时帮助您找到)。也许你在推回之前调整了大小?

标签: c++ arrays vector size


【解决方案1】:

在这样的锯齿状向量构造中,outerVec.size()outerVec[0].size() 可以解决问题:

#include <vector>
#include <array>
#include <iostream>

int main()
{
    int number1 = 3;
    int number2 = 5;
    std::array<double, 2> val;
    std::vector<std::array<double, 2>> innerVec;
    for (int i = 0; i < number1; i++) {
        innerVec.push_back(val);
    }

    std::vector<std::vector<std::array<double, 2>>> outerVec;
    for (int i = 0; i < number2; i++) {
        outerVec.push_back(innerVec);
    }

    std::cout << "number1: " << outerVec[0].size() << std::endl;
    std::cout << "number2: " << outerVec.size() << std::endl;
}

它返回2*number1,可能是因为val 有2 个条目

不,您使用outerVec[0][0].size() 获得val 的大小。

【讨论】:

    【解决方案2】:

    很明显,向量的维度是[number2][number1][2]

    这是一个演示程序。

    #include <iostream>
    #include <array>
    #include <vector>
    
    int main() 
    {
        const size_t number1 = 10;
        const size_t number2 = 5;
    
        std::vector<std::vector<std::array<double,2>>> v =
            { number2, std::vector<std::array<double, 2 >>( number1 ) };
    
    
        std::cout << "v.size() = " << v.size() << '\n';     
        std::cout << "v[0].size() = " << v[0].size() << '\n';       
        std::cout << "v[0][0].size() = " << v[0][0].size() << '\n';     
    
        return 0;
    }
    

    它的输出是

    v.size() = 5
    v[0].size() = 10
    v[0][0].size() = 2
    

    【讨论】:

      【解决方案3】:

      好的,

      果然你们都是对的^^

      错误很愚蠢,我简单地启动了innerVec如下:

      std::vector<array<double, 2>> innerVec(number1)
      

      然后通过 push_back() 再次将 number1 个 val 元素放入 innerVec。当然,这导致了 2*number1 个 val 元素。愚蠢的错误......

      因此,对于给您带来的任何不便,我深表歉意,并感谢所有帮助过的人......

      问候

      【讨论】:

        猜你喜欢
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-05
        相关资源
        最近更新 更多