首页 > 解决方案 > 用 (const vector) 实现的 Floyd 算法& t : 航班), 't' 上存储的值是什么

问题描述

我遇到了弗洛伊德的这种实现,但我有一个问题,即“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]);
        }
    }
}

标签: c++vector

解决方案


此语法是基于范围的循环,在 C++11 中引入。在这里,t只是对 的元素的 const 引用flights。循环会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]);
}

推荐阅读