矢量C ++大小和访问元素

时间:2016-05-31 17:36:50

标签: c++ vector

我在代码中有这个

vector<vector<double> > times(pCount, vector<double>(5,0.0));

我的问题是,它所分配的矩阵的大小是多少?如果我需要访问其中的所有值,我该怎么办?

2 个答案:

答案 0 :(得分:4)

您有一个pCount × 5矩阵。第一个索引可以在0和pCount - 1之间(包括),第二个索引可以在0到4之间(包括0和4)。所有值都初始化为0.

这是因为您正在使用std :: vector构造函数,其第一个参数是count n(用于初始化向量的元素数),其第二个参数是一个值,即复制n次。因此,times是一个包含pCount元素的向量,每个元素都是vector<double>。这些向量中的每一个都是提供的vector<double>(5,0.0)的副本,它由5个元素构成,每个元素都是0.0。

您可以获得任何单独的价值,例如times[3][2]或您有什么。使用C ++ 11或更高版本,您可以迭代所有值,如下所示:

for (auto& v : times)
    for (double& d : v)
        d += 3.14; // or whatever

如果您不需要修改这些值,但只能访问它们,则可以删除“&”符号,或者更好地执行:&/ p>

for (const auto& v : times)
    for (double d : v)
        std::cout << d << ", "; // or whatever

在C ++ 11之前,你必须更加冗长,或者只使用索引:

for (int i = 0; i < pCount; ++i)
    for (int j = 0; j < 5; ++j)
        times[i][j] += 3.14; // or whatever

答案 1 :(得分:0)

这与[pCount][5]

的标准数组相当
double[pCount][5] = {{0.0, 0.0, 0.0, 0.0, 0.0},  // |
                     {0.0, 0.0, 0.0, 0.0, 0.0},  // |
                     {0.0, 0.0, 0.0, 0.0, 0.0},  // | pCount = 5
                     {0.0, 0.0, 0.0, 0.0, 0.0},  // |
                     {0.0, 0.0, 0.0, 0.0, 0.0}}; // |

当然,您正在使用向量,因此在创建times后,行数和列数可以变化。

std::vector包含operator[]的覆盖,因此您可以使用该运算符访问数据。

auto Val = times[2][3]