用于循环c ++向量的合适数据类型

时间:2015-11-13 21:16:15

标签: c++ vector iterator

我有这样的代码:

std::vector<std::vector<double> > solutions;
std::vector<double> test_vals(5);
for(int i = 0; i < 10; i++)
{
    test_vals = getDoubleVector();
    if (/*some condition*/)
    {
        solutions.push_back(test_vals);
    }
}

现在,当我尝试使用这种技术迭代向量时,它会在运行时崩溃:

for(std::size_t i = 0; i < solutions.size(); i++)
{
    for(int j = 0; j < 5; j++)    
    {
        std::cout << solutions[i][j] << std::endl;
    }
}

使用此行作为内部循环的for条件也会导致崩溃:

for(std::size_t j = 0; j < solutions[i].size(); j++)

只有“正确”的方法有效:

for(std::vector<double>::size_type j = 0; j < solutions[i].size(); j++)

事情是,我对j的哪种数据类型适合我感到有点困惑。我使用简单的int变量来迭代字符串向量,并且工作正常。它也适用于我随着时间推移使用的一些自定义数据类型,为什么不在这里呢?此外,在std::size_t适合的情况下?在示例中,我使用更安全的方法是有意义的,但如果我需要做这样的事情该怎么办:

for(std::vector<double>::size_type j = 0; j < solutions[i].size(); j++)
{
    std::vector</*some other data type*/> vector2(5);
    vector2[j].double_val = solutions[i][j];
}

现在我需要为size_type单独vector2,还是在某种程度上我可以在这里使用j

1 个答案:

答案 0 :(得分:0)

忘记索引,你甚至都没有使用它。

for (const auto& solution : solutions)
{
    for (const auto& item : solution)
        std::cout << item << std::endl;
}