假设您希望将数据存储为浮点数(而不是字符串),您可能需要执行以下操作:
#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>
int main() {
std::ifstream in("Qi.txt");
// initialize the vector from the values in the file:
std::vector<double> lines{ std::istream_iterator<double>(in),
std::istream_iterator<double>() };
// Display the values:
for (int i=0; i<lines.size(); i++)
std::cout << "lines[" << i << "] = " << lines[i] << '\n';
}
关于样式的简单说明:我更喜欢在创建变量时看到变量完全初始化,所以std::ifstream in("Qi.txt");
优于std::ifstream in; in.open("Qi.txt");
。同样,最好直接从 istream 迭代器初始化行向量,而不是创建一个空向量,然后将其填充到显式循环中。
最后,请注意,如果您坚持编写显式循环,那么您never想要使用类似的东西while (somestream.good())
or while (!somestream.eof())
控制你的循环——这些大部分都被破坏了,所以它们不能(可靠地)正确地读取文件。根据所涉及的数据类型,他们经常会从文件中读取最后一项两次。通常,你想要类似的东西while (file >> value)
or while (std::getline(file, somestring))
。这些在读取后立即检查文件的状态,因此一旦读取失败,它们就会退出循环,避免了问题while (good())
style.
哦,顺便说一句:这是编写的,期望编译器(至少在某种程度上)符合 C++11。对于较旧的编译器,您需要更改此设置:
// initialize the vector from the values in the file:
std::vector<double> lines{ std::istream_iterator<double>(in),
std::istream_iterator<double>() };
...这样的事情:
// initialize the vector from the values in the file:
std::vector<double> lines(( std::istream_iterator<double>(in)),
std::istream_iterator<double>() );