C++ 将字符串转换为double,然后在While循环中将其推送到向量 矢量数据; 字符串内容; 河流充填; infle.open(“test.txt”); while(getline(填充,内容“”) { atof(content.c_str()); 数据。推回(内容); } infle.close();
所以这里我从一个文本文件中提取字符串,并尝试将它们存储到一个向量中作为双精度。然而,我得到的错误是,它不能将“内容”推送到数据向量中,因为它不是双精度的。我尝试了一些方法,但得到了相同的一般错误,即内容没有转换为双精度。所以,我不确定我是否注意到了一个简单的错误,因为隧道视觉或者是否有其他我遗漏的东西。谢谢您的帮助。C++ 将字符串转换为double,然后在While循环中将其推送到向量 矢量数据; 字符串内容; 河流充填; infle.open(“test.txt”); while(getline(填充,内容“”) { atof(content.c_str()); 数据。推回(内容); } infle.close();,c++,string,vector,double,C++,String,Vector,Double,所以这里我从一个文本文件中提取字符串,并尝试将它们存储到一个向量中作为双精度。然而,我得到的错误是,它不能将“内容”推送到数据向量中,因为它不是双精度的。我尝试了一些方法,但得到了相同的一般错误,即内容没有转换为双精度。所以,我不确定我是否注意到了一个简单的错误,因为隧道视觉或者是否有其他我遗漏的东西。谢谢您的帮助。atof返回double,因此此行 vector<double> data; string content; ifstream infile; infile.open("
atof
返回double
,因此此行
vector<double> data;
string content;
ifstream infile;
infile.open("test.txt");
while(getline(infile, content, ' '))
{
atof(content.c_str());
data.push_back(content);
}
infile.close();
简单地丢弃结果。您可以这样做:
atof(content.c_str());
或者没有临时的
double tmp = atof(content.c_str());
data.push_back(tmp);
在C++中,将文件读入向量的惯用方法如下:
data.push_back(atof(content.c_str()));
或
矢量数据{istream_迭代器(cin),istream_迭代器()};//C++11语法
C++98语法使用一对额外的圆括号来颠覆。您的代码不存储
atof
的返回值。你也可以只做double d;虽然(infle>>d){..}
取决于您的库支持,但还有std::stod
。您可以简单地使用>
从流中直接读取双精度数据……或者只使用ifstream infle(“test.txt”);矢量数据{istream_迭代器(infle),istream_迭代器()代码>@JerryCoffin谢谢你的评论!就是这样,我忘记了我需要使用一个临时值,所以现在这才是问题所在。我真的很感谢你和其他人的帮助。
back_insert_iterator< vector<double> > back_it(data);
copy(istream_iterator<double>(infile)
, istream_iterator<double>()
, back_it);
vector<double> data(istream_iterator<double>(cin), (istream_iterator<double>())); // C++98 syntax
vector<double> data { istream_iterator<double>(cin), istream_iterator<double>() }; // C++11 syntax