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

一基友要对实验数据进行处理,每次大概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中执行响应的语句,筛选出想要的结果。

你可能感兴趣的:(C++)