То, что я пытаюсь сделать, это перебирать вектор двойных значений и возвращать векторное положение самого близкого двойника. У меня есть две проблемы с этим.
При попытке найти ближайшее двойное значение в векторе, используя lower_bound()
, я получаю значение, отличное от нуля, только если введу 1.
Я не уверен, как использовать lower_bound
, чтобы вернуть векторную позицию вместо двойного значения.
Вот мои три основных файла, которые я использую с попыткой кода
Convert.cpp
double Convert::convertmVtoK(double value)
{
double conversion = *std::lower_bound(mV.begin(), mV.end(), value);
cout<<"This is conversion mV to K"<<" "<< conversion;
}
double Convert::convertKtomV(double value)
{
double conversion = *std::lower_bound(mV.begin(), mV.end(), value);
cout<<"This is conversion K to mV"<<" "<< conversion;
}
Conversion.h
class Convert
{
public:
Convert();
virtual ~Convert();
double convertmVtoK(double mV);
double convertKtomV(double K);
void readFile();
protected:
private:
std::ifstream inFile;
std::vector<double> kelvin,mV,sensitivity;
double tempKelvin,tempmV,tempSensitivity;
};
#endif // CONVERT_H
main.cpp
#include "Convert.h"
#include <stdio.h>
#include<fstream>
#include<iostream>
int main()
{
Convert convert;
convert.readFile();
convert.convertmVtoK(2.0);
convert.convertKtomV(5.000);
return 0;
}
Обновление: поэтому я все еще пытаюсь использовать lower_bound (). Вот моя обновленная функция.
double Convert::convertmVtoK(double value)
{
std::vector<double>::iterator pos;
pos = std::lower_bound(mV.begin(), mV.end(), value);
cout<<"This is conversion mV to K"<<" "<< kelvin[(pos-mV.begin())];
}
В настоящее время, если я ввожу значение с плавающей запятой, я все еще не смогу получить правильное значение вектора, он либо возвращает 0, либо значение вектора [0].
Обновление 2: текстовые значения
1.4 1.644290 -12.5
1.5 1.642990 -13.6
1.6 1.641570 -14.8
1.7 1.640030 -16.0
1.8 1.638370 -17.1
1.9 1.636600 -18.3
2.0 1.634720 -19.3
2.1 1.632740 -20.3