Я написал функцию, которая читает неизвестное количество данных (когда в столбце) из файла в вектор.Функция чтения из файла в вектор C++
#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);
}
Но lineCount увеличивает одно дополнительное время после того, как данные из файла были скопированы в вектор. Есть ли более элегантный способ решения этой проблемы, чем заявление if, которое я написал?
EDIT: Очевидно, что я не буду загружать файл данных. Код компилируется отлично. Я просто ищу улучшения в выражении if (если он существует).
Используйте GetLine() вместо этого. –
@Matt О чем ты говоришь? Код просто компилируется в VS15 – nikjohn
Используйте x.push_back() вместо x.at (linecount), передайте N прямо в ReadFromFile, постройте v, но оставьте пустым и зарезервируйте N элементов. –