我需要从包含每行上的新浮点数的.data或.txt文件中读取一个向量. 我已经远远地搜索并应用了许多不同的方法,但每次我得到相同的结果,Main.size()为0和错误说“向量下标超出范围”,所以
我已经远远地搜索并应用了许多不同的方法,但每次我得到相同的结果,Main.size()为0和错误说“向量下标超出范围”,所以显然向量只是没有读取任何东西进入文件.
注意:该文件既在文件夹中,也包含在VS项目中.
无论如何,这是我的代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<double> Main;
int count;
string lineData;
double tmp;
ifstream myfile ("test.data", ios::in);
double number;
myfile >> count;
for(int i = 0; i < count; i++) {
myfile >> tmp;
Main.push_back(tmp);
cout << count;
}
cout << "Numbers:\n";
cout << Main.size();
for (int i=0; i=((Main.size())-1); i++) {
cout << Main[i] << '\n';
}
cin.get();
return 0;
}
我得到的结果总是简单:
Numbers: 0你的循环错了:
for (int i=0; i=((Main.size())-1); i++) {
试试这个:
for (int i=0; i < Main.size(); i++) {
此外,将数字读入矢量并将其写入stdout的更惯用的方法是这样的:
#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>
#include <algorithm> // for std::copy
int main()
{
std::ifstream is("numbers.txt");
std::istream_iterator<double> start(is), end;
std::vector<double> numbers(start, end);
std::cout << "Read " << numbers.size() << " numbers" << std::endl;
// print the numbers to stdout
std::cout << "numbers read in:\n";
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
}
虽然您应该检查ifstream的状态以获取读取错误.
