我已經寫了一個函數,用於從文件讀取未知數量的數據(當在一列中)到一個向量。函數從文件讀入向量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語句更優雅的解決這個問題的方法?
編輯:顯然,我不會上傳數據文件。代碼完美編譯我只是在if語句中尋找改進(如果存在的話)。
使用函數getline()來代替。 –
@Matt你在說什麼?代碼在VS15中編譯得很好 – nikjohn
使用x.push_back()而不是x.at(linecount),將N direct傳遞給ReadFromFile,構造v但留空,並保留N個元素。 –