簡體   English   中英

適用於遍歷C ++向量的數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM