[英]Suitable data type for looping through c++ vectors
我有這樣的代碼:
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];
}
現在我需要為vector2
攜帶一個單獨的size_type
還是在這里也可以使用j
某種方式?
忘記索引,您甚至都沒有使用它。
for (const auto& solution : solutions)
{
for (const auto& item : solution)
std::cout << item << std::endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.