То, что я пытаюсь сделать, это перебирать вектор двойных значений и возвращать векторное положение самого близкого двойника.
При попытке найти ближайшее двойное значение в векторе, используя lower_bound()
, я получаю либо значение «0», либо «144» (последнюю позицию моего вектора), независимо от того, какое двойное значение я пытаюсь найти .
Вот мой попытанный код
Попытка 1:
double Convert::convertmVtoK(double value)
{
std::vector<double>::iterator low,up;
low=std::lower_bound (mV.begin(), mV.end(), value);
up= std::upper_bound (mV.begin(), mV.end(), value);
std::cout << "lower_bound at position " << (low- mV.begin()) << '\n';
std::cout << "upper_bound at position " << (up - mV.begin()) << '\n';
}
Попытка 2:
double Convert::convertmVtoK(double value)
{
auto it = lower_bound(mV.begin(), mV.end(), value);
if (it == mV.begin())
{
it = mV.begin();
}
else
{
--it;
}
auto jt = upper_bound(mV.begin(), mV.end(), value), out = it;
if (it == mV.end() || jt != mV.end() && value - *it > *jt - value)
{
out = jt;
}
cout<<"This is conversion mV to K"<<" "<< *out;
}