gpt4 book ai didi

c++ - 从文件读取到 vector C++ 的函数

转载 作者:行者123 更新时间:2023-11-27 22:48:23 24 4
gpt4 key购买 nike

我编写了一个函数,可以将未知数量的数据(当在列中时)从文件读取到 vector 。

#include <iostream>
#include <vector>
#include <fstream> // file writing
#include <cassert>


void ReadFromFile(std::vector<double> &x, const std::string &file_name)
{
std::ifstream read_file(file_name);
assert(read_file.is_open());

size_t lineCount = 0;
while (!read_file.eof())
{
double temp;
read_file >> temp;
x.at(lineCount) = temp;
if (lineCount == x.size() - 1) { break; } // fixes the out of range exception

lineCount++;
}
read_file.close();
}
int main()
{
size_t Nx = 7;
size_t Ny = 7;
size_t Nz = 7;
size_t N = Nx*Ny*Nz;

// Initial Arrays
std::vector <double> rx(N);
std::string Loadrx = "Loadrx.txt";
ReadFromFile(rx, Loadrx);
}

但是在文件中的数据被复制到 vector 中之后,lineCount 会额外增加一次。有没有比我编写的 if 语句更优雅的方法来解决这个问题?

最佳答案

I have written a function that reads an unknown number of data (when in a column) from a file to a vector.

从“列”(或其他常规范式的)文件中读取未知数量数据的最优雅(而且我想也是惯用的)方法之一是使用 istream 迭代器:

void ReadFromFile(std::vector<double> &x, const std::string &file_name)
{
std::ifstream read_file(file_name);
assert(read_file.is_open());

std::copy(std::istream_iterator<double>(read_file), std::istream_iterator<double>(),
std::back_inserter(x));

read_file.close();
}

用法:

int main()
{
// Note the default constructor - we are constructing an initially empty vector.
std::vector<double> rx;
ReadFromFile(rx, "Loadrx.txt");
}

如果你想写一个“安全”的版本来读取有限数量的元素,使用copy_if:

void ReadFromFile(std::vector<double> &x, const std::string &file_name, unsigned int max_read)
{
std::ifstream read_file(file_name);
assert(read_file.is_open());

unsigned int cur = 0;
std::copy_if(std::istream_iterator<double>(read_file), std::istream_iterator<double>(),
std::back_inserter(x), [&](const double&) {
return (cur++ < max_read);
});

read_file.close();
}

用法很明显:

ReadFromFile(rx, Loadrx, max_numbers);

关于c++ - 从文件读取到 vector C++ 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40669068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com