0

我更长的程序中的这段特定代码不断崩溃。它编译得很好,但是 Windows 结束了它。

 out_stream_names.open("names.dat");
 for(int i = a.size(); i>0 ; i=i-1)
       {
             out_stream_names << a[i] << endl;
       }
 out_stream_names.close();

我想弄清楚为什么它总是崩溃。我不是要求复制代码。谢谢。

4

3 回答 3

5

信息很少。但首先引起轰动的是a.size()

尝试:

 out_stream_names.open("names.dat");
 for(int i = a.size()-1; i>=0 ; i=i-1)
       {
             out_stream_names << a[i] << endl;
       }
 out_stream_names.close();

由于您只想在偶数索引中输出,在我们遍历的情况下是奇数索引,请使用:

if(i&1) out_stream_names << a[i] << endl;
于 2013-02-26T03:20:21.320 回答
2

我建议通过使用以下顺序来避免此类问题:

std::copy(a.rbegin(), a.rend(), 
          std::ostream_iterator<a::value_type>(out_stream_names, "\n"));

作为奖励,在这种情况下,您可能还会获得一些性能提升(通过替换endl\n,避免在您编写的每个名称之间刷新流)。

[请注意,它a::value_type不会按原样编译——您需要指定实际类型]。

于 2013-02-26T03:35:09.773 回答
1
out_stream_names.open("names.dat");
for(int i = a.size() - 1; i >= 0; --i) 
{
   out_stream_names << a[i] << endl;
}
out_stream_names.close();

?? 试试看!

于 2013-02-26T03:22:07.787 回答