[英]Read doubles out of .txt file into double array c++
我正在嘗試創建一個需要大量股票價格的程序。 我將這些價格存儲在.txt文件中,每行一個雙。 有一個未知的數字(可能是數千)。 我無法將數據轉換為可以操作的數組。 我現在幾個小時都無法解決這個問題。 每當我嘗試從文件中讀取數據然后將其轉換為double時,我會遇到奇怪的線程錯誤並且程序掛起。 任何人都可以告訴我如何將未知數量的雙打讀入陣列。
string line;
vector<double> doubles;
fstream myfile ("/Users/jaychinnaswamy/Documents/PMHistory.txt",std::ios_base::in);
int x=0;
float a;
while (myfile >> a)
{
doubles[x]=a;
}
文件結構的一個例子是:
50.4000000000000
50.8000000000000
50.5000000000000
50.2100000000000
49.1500000000000
48.5000000000000
謝謝
你在這里創建了一個空矢量 。
vector<double> doubles;
在這里,你正在索引向量,好像它不是空的 。 它仍然是空的,您正在訪問無效元素。
doubles[x]=a;
將該代碼更改為使用std::vector::push_back()
。
doubles.push_back(a);
從我看到的代碼中明顯看出兩件事(已在評論中提到):
x
。 doubles[x]
。 這是未定義的行為。 您需要提前分配元素或使用push_back
根據需要增長向量。 您提交的代碼存在一些問題。 正如其他人所說,您已經實例化了一個空的std::vector
並且您的代碼會對不存在的索引進行分配。 由於您的問題圍繞未知數量的元素(動態大小),因此請使用std::vector
的push_back
方法。 我勸你不要從轉換float
到double
通過a
。 您知道數據是double
並且您希望將其存儲為double
,因此請使用double
。 由於這只是代碼的一部分,因此您可以利用for
循環使double a
范圍綁定到數據加載。
您的代碼可以重寫為:
std::ifstream myfile("/Users/jaychinnaswamy/Documents/PMHistory.txt");
std::vector<double> doubles;
for (double a; myfile >> a;) {
doubles.push_back(a);
}
但是,如果您不需要數據驗證,您知道該文件只包含雙精度數,並且您真的只想導入數字,然后使用std::vector
的范圍構造函數通過std::istream_iterator
為您讀取文件。
#include <fstream>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::ifstream myfile("/Users/jaychinnaswamy/Documents/PMHistory.txt");
std::vector<double> doubles{(std::istream_iterator<double>(myfile)),
std::istream_iterator<double>()};
}
特別注意std::vector
范圍構造函數的第一個iterator參數周圍的()
。 沒有()
會導致語法歧義,也稱為“最令人煩惱的解析” 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.