如何获得vector <vector <array <array <double,2 >>>构造中每个维度的大小?

时间:2019-10-16 09:34:11

标签: c++ arrays vector size

我有以下构造。

数组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);
}

问题是,如何获得number1的大小(实际上是指innerVec)? 与

outerVec[0].size();

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

3 个答案:

答案 0 :(得分:0)

在像这样的锯齿状向量构造中,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个条目

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

答案 1 :(得分:0)

很明显,向量的维数是[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

答案 2 :(得分:0)

好吧

如您所愿,你们都是正确的^^

错误很愚蠢,我只是按如下方式启动innerVec:

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

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

因此,给您带来的不便,我们深表歉意。感谢所有帮助我们的人。

问候