V1.Front() 和 V1.Back() 改为 V1.begin() 和 V1.end()
时间: 2023-08-01 10:12:50 浏览: 73
是的,您说得对,感谢指出错误!V1.Front() 和 V1.Back() 返回的是指向容器第一个元素和最后一个元素的指针,而不是迭代器。正确的写法应该是使用 begin() 和 end() 函数返回迭代器,即:
```
display_vector(V1.begin(), V1.end());
```
再次感谢您的纠正!
相关问题
bool SpeedData::EvaluateByTime(const double t, common::SpeedPoint* const speed_point) const { if (size() < 2) { return false; } if (!(front().t() < t + 1.0e-6 && t - 1.0e-6 < back().t())) { return false; } auto comp = [](const common::SpeedPoint& sp, const double t) { return sp.t() < t; }; auto it_lower = std::lower_bound(begin(), end(), t, comp); if (it_lower == end()) { *speed_point = back(); } else if (it_lower == begin()) { *speed_point = front(); } else { const auto& p0 = *(it_lower - 1); const auto& p1 = *it_lower; double t0 = p0.t(); double t1 = p1.t(); speed_point->Clear(); speed_point->set_s(common::math::lerp(p0.s(), t0, p1.s(), t1, t)); speed_point->set_t(t); if (p0.has_v() && p1.has_v()) { speed_point->set_v(common::math::lerp(p0.v(), t0, p1.v(), t1, t)); } if (p0.has_a() && p1.has_a()) { speed_point->set_a(common::math::lerp(p0.a(), t0, p1.a(), t1, t)); } if (p0.has_da() && p1.has_da()) { speed_point->set_da(common::math::lerp(p0.da(), t0, p1.da(), t1, t)); } } return true; } 请解析以上代码
)) {
return false;
}
if (!(back().t() > t - 1.0e-6)) {
return false;
}
int i = 0;
while (i < size() - 1 && t - at(i).t() > 1.0e-6) {
++i;
}
DCHECK(i < size() - 1);
const double t0 = at(i).t();
const double v0 = at(i).v();
const double t1 = at(i + 1).t();
const double v1 = at(i + 1).v();
DCHECK(t0 < t + 1.0e-6);
DCHECK(t1 > t - 1.0e-6);
const double speed = (v1 - v0) / (t1 - t0) * (t - t0) + v0;
speed_point->set_s(speed);
speed_point->set_t(t);
return true;
}
我的回答是,这是一段 C++ 代码,实现了 SpeedData 类的一个函数,名为 EvaluateByTime。它的作用是根据给定的时间计算速度。具体实现是,首先进行了一系列判断,判断有无速度数据、时间是否在速度范围内,然后通过线性插值计算当前时间对应的速度,并将结果保存在 SpeedPoint 类型的 speed_point 变量中。如果成功计算则返回 true,否则返回 false。
阅读全文