我有这样的代码:
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
?
答案 0 :(得分:0)
忘记索引,你甚至都没有使用它。
for (const auto& solution : solutions)
{
for (const auto& item : solution)
std::cout << item << std::endl;
}