C++ for循环,迭代器产生错误的结果c++;
我正在创建一个HTML文件,该文件创建了一个名为“地震”的对象的谷歌地图,其中包含纬度、经度、震级和深度。另一个名为QuakeData的类是创建地震对象向量的类 下面的函数获取对象的向量,并获取对象的详细信息(纬度、经度和幅值),然后以以下格式将其输出到HTML中:C++ for循环,迭代器产生错误的结果c++;,c++,unix,g++,C++,Unix,G++,我正在创建一个HTML文件,该文件创建了一个名为“地震”的对象的谷歌地图,其中包含纬度、经度、震级和深度。另一个名为QuakeData的类是创建地震对象向量的类 下面的函数获取对象的向量,并获取对象的详细信息(纬度、经度和幅值),然后以以下格式将其输出到HTML中: [58.678, -151.887, 'M2.6'], 其中第一个数字是纬度,第二个是经度,第三个是震级,格式如图所示 下面是我目前使用的循环,它使用getter提取纬度、经度和震级: double mag; double lat
[58.678, -151.887, 'M2.6'],
其中第一个数字是纬度,第二个是经度,第三个是震级,格式如图所示
下面是我目前使用的循环,它使用getter提取纬度、经度和震级:
double mag;
double lat;
double lon;
string complete;
ostringstream out;
vector<Quake>::const_iterator i;
for (i = quakes.begin(); i != quakes.end(); i++)
{
mag = i->getMagnitude();
lat = i->getLatitude();
lon = i->getLongitude();
out << "[" << lat << ", " << lon << ", 'M" << mag << "'],";
complete = out.str();
outfile << complete << endl;
}
我想要的是:
[58.678, -151.887, 'M2.6'],(end of line)
[33.92, -117.08, 'M2.9'],(end of line)
[-3.203, 142.864, 'M4.7'],(end of line)
这里到底出了什么问题?任何帮助都将不胜感激。每个循环都将新数据附加到现有流中:将声明移动到循环中,以便为每一行使用一个新实例
for (i = quakes.begin(); i != quakes.end(); i++)
{
ostringstream out;
每个循环将新数据追加到现有流中:将声明移动到循环中,以便为每一行使用一个新实例
for (i = quakes.begin(); i != quakes.end(); i++)
{
ostringstream out;
您需要在迭代之间清除ostringstream。使用
out.str(“”);out.clear()代码>(查看解释)。您需要在迭代之间清除ostringstream。使用out.str(“”);out.clear()
(查看解释)。正如人们指出的那样,您需要重置ostringstream
或缩小其范围
编写代码的一种更惯用、更有效的方法是提取代码,将Quake
输出到ostream
,然后使用标准算法将其直接复制到输出流,而不需要中间ostringstream
:
ostream& operator<<(ostream& os, const Quake& quake) {
os << "["
<< quake.getLatitude() << ", "
<< quake.getLongitude() << ", "
<< "'M" << quake.getMagnitude()
<< "']";
return os;
}
int main() {
vector<Quake> quakes;
ofstream outfile("quakes.txt");
copy(quakes.begin(), quakes.end()
ostream_iterator<Quake>(outfile, ",\n"));
}
ostream&operator正如人们指出的那样,您需要重置ostringstream
或缩小其范围
编写代码的一种更惯用、更有效的方法是提取代码,将Quake
输出到ostream
,然后使用标准算法将其直接复制到输出流,而不需要中间ostringstream
:
ostream& operator<<(ostream& os, const Quake& quake) {
os << "["
<< quake.getLatitude() << ", "
<< quake.getLongitude() << ", "
<< "'M" << quake.getMagnitude()
<< "']";
return os;
}
int main() {
vector<Quake> quakes;
ofstream outfile("quakes.txt");
copy(quakes.begin(), quakes.end()
ostream_iterator<Quake>(outfile, ",\n"));
}
ostream和操作符