您的位置:首页 > 其它

小应用--如何从一堆数字中选择出与10的倍数最接近的一些数

2016-03-27 09:43 351 查看
一基友要对实验数据进行处理,每次大概7000条数据吧,然后从里面没十秒选出一行数据。

所以,就帮他写了一个简单的代码。

1读数据

即我们常用的读文件,为了简单,就读txt文件吧。然后把读到的数据存入vector:

ifstream    infile; //infile是一个文件流,因此其实还是对流进行的操作
infile.open("./data.txt");
vector<double>   data_vector;  //用来保存文本中数据的向量
double temp;
if (infile.is_open())   //判断文件流是否处于打开状态
{
while (infile.good() && !infile.eof())
{
infile >> temp;
data_vector.push_back(temp);    //将数据读入到data_vector
}
}
infile.close();


这里没什么好说的:

i 头文件fstream

ii 不要忘了调用close

2查找

接下来就是如何找出与10的倍数最接近的一些数。

i 先找出最大数,也就是看看最大的数是10的多少倍,即上限。

int n = *std::max_element(data_vector.begin(), data_vector.end())/10;


ii 通过for循环,把查找结果存入result_vector中

vector<double> result_vector;
for (int k = 1; k <= n; k++)
{
for (int i = 0, j = 1; j < data_vector.size(); i++, j++)
{
if (std::abs(data_vector[i] - 10 * k) > std::abs(data_vector[j] - 10 * k))
{
sub_temp = data_vector[j];
}
}
result_vector.push_back(sub_temp);
sub_temp = 0;
}


3写数据

最后就是把result_vector存入到txt中了:

ofstream    outfile;
outfile.open("./result.txt");  //打开输出文件
std::string message;
for (int i = 0; i < result_vector.size(); i++)
{
for (auto iter = data_vector.begin(); iter != data_vector.end(); iter++)
{
if (result_vector[i] == *iter)
{
int temp = iter - data_vector.begin() + 1;
message.append(std::to_string(temp));
message.append(" ");
}
}
}
outfile << message;
outfile.close();


4未完待续

其实数据源是存在excel中的,可以直接读取excel。

然后在excel中执行响应的语句,筛选出想要的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: