0
我會經常代表和工藝折線像這樣:每次兩個迭代器?
typedef std::vector<Point_t> Polyline_t;
double PolylineLength(const Polyline_t& line)
{
double len = 0.0;
for(size_t i = 0; i < line.size()-1; ++i)
len += (line[i+1]-line[i+0]).length();
return len;
}
最直接轉化爲我想出了雙向迭代是:
typedef std::list<Point_t> Polyline_t;
typedef Polyline_t::const_iterator Polyline_t_cit;
double PolylineLength(const Polyline_t& line)
{
double len = 0.0;
Polyline_t_cit last = line.end();
last--;
for(Polyline_t_cit i = line.begin(); i != last; ++i)
{
const Point_t& beg = *i;
const Point_T& end = *(++i);
len += (end - beg).length();
--i;
}
return len;
}
有沒有表達這種更簡潔的方式用迭代器進行兩次處理?
我認爲你需要測試如果行是空的,否則你會有問題。 – 2009-09-05 00:46:03
原始代碼有同樣的問題。所以我認爲多邊形對象不能爲空。但我同意你的看法,處理空行容器也是一個好主意。 – 2009-09-05 01:06:57