我想要完成的是迭代双精度值向量并返回最接近的可能双精度值的向量位置。我对此有两个问题。
当尝试使用以下命令查找向量中最接近的双精度值时lower_bound()
,如果我输入 1,我只会收到非零的值。
我不知道如何使用lower_bound
返回向量位置而不是双精度值。
这是我正在尝试的代码中使用的三个主要文件
转换.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;
}
转换.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