用(const vector <int>&t:flight)实现的Floyd算法,存储在't'上的值是多少

时间:2018-11-12 23:02:31

标签: c++ vector

我遇到了floyd的这种实现方式,但是我看到一个问题,即将“ t”存储为值,因为飞行是向量的向量。 (我了解算法的工作原理。)

//vector<vector<int>>& flights
//vector<vector<int>> vec(n, vector<int>(k + 1));

for (int i = 1; i <= k; i++)
{
    for (int j = 0; j < n; j++)
    {
        vec[j][i] = vec[j][i - 1];

        for (const vector<int>& t : flights)
        {
            vec[t[1]][i] = min(vec[t[1]][i], vec[t[0]][i - 1] + t[2]);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

此语法是C ++ 11中引入的基于范围的循环。在这里,t只是对flights元素的const引用。循环将按顺序访问flights的每个元素,您可以使用标识符t引用当前元素。

循环大致等效于以下C ++ 11之前的语法:

for(std::vector<std::vector<int>>::const_iterator it = flights.begin(); it != flights.end(); ++it)
{
    const vector<int>& t = *it;
    vec[t[1]][i] = min(vec[t[1]][i], vec[t[0]][i - 1] + t[2]);
}