【问题标题】:How to store the data produced during a while loop?如何存储while循环期间产生的数据?
【发布时间】:2013-07-07 19:55:41
【问题描述】:

几个小时前我开始学习 C++(作为我曾经尝试学习的第一种编程语言),但我被一个非常简单(我确信)的问题所困......

基本上,我想从一种算法开始,它可以在给定高度和宽度的整数值的二维表面上,为任何点(由整数 a 和 b 定义)提供一个局部“密度值”。

我遇到的问题是,由于我想复用结果,如何存储程序启动时出现的数据(因为命令而出现的数据:

//print
cout<<D<<endl;

我真的很努力地寻找解决方案却没有找到任何东西...... 它可以存储在外部文件中,也可以存储在一种“缓冲区”中,任何好的解决方案都可以做到这一点。

我只需要保留这个数据列表

谢谢!

这是我的代码:

#include <iostream>
#include <fstream>
//#include <vector> (the solution??)
#include <cstdlib>
#include <string>
#include <sstream>
using namespace std;

// constant values

float Da=0.1; //densities
float Db=0.5;
float Dc=1;
double Dd=1/3;

int l = 99;  //width & height
int h = 99;

float u = 1;  // UNIT


int main ()
{

    float a = 0;
    float b = 0; // Local variables



    while (a<l+1, b<h+1){

        //values for given a & b

        double DL = Da-Da*(b/h)+Dc*(b/h);
        double DR = Db-Db*(b/h)+Dd*(b/h);
        double D  = DL-DL*(a/l)+DR*(a/l);

        //print
        cout<<D<<endl;

        // next pixel & next line
        a++;
        if (a>l) {
            a = 0;
            b = b+u;
        }
}
}

【问题讨论】:

  • 是的,std::vector&lt;double&gt; 很适合这个。用名称声明一个变量,就像你一直在做的那样,然后使用push_back 成员向它添加新的数据点。
  • 您能说得更具体些吗?我尝试使用vector没有成功,我想我不知道如何使用它。
  • 我没有找到关于这个主题的好例子或教程,有什么想法吗?非常感谢!

标签: c++ list memory printing while-loop


【解决方案1】:

如果您只想将它​​们存储在列表或其他东西中,那么正如@Ben Voigt 提到的那样,vector 是一个不错的选择...

在你的情况下:

std::vector<double> myVector;
.
.
.
.
double D  = DL-DL*(a/l)+DR*(a/l);

// Storing over the vector
myvector.push_back (D);

所以现在你可以以任何你想要的方式使用向量...不要忘记取消注释你的行以包含向量...你也可以使用“pop_back”方法在需要时从中删除一些东西...

要在文件上加载矢量: Writing Vector Values to a File

处理向量的好链接:http://msdn.microsoft.com/en-IN/library/8wt934f9%28v=vs.71%29.aspx

如果您需要了解向量:http://www.cplusplus.com/reference/vector/vector/

【讨论】:

  • 不错的链接。在问题的上下文中添加一点工作代码和有关向量的详细信息肯定会有所帮助。
  • 太好了,谢谢,我明白了!第一个链接对我来说很好
  • @adrienlucca.wordpress.com 好的,这很好...如果您需要更多帮助,请告诉我们,然后您可以通过接受您喜欢的任何答案来关闭帖子...跨度>
【解决方案2】:

您可以使用 fstream 将值保存到文件中。

fstream output("densities");

然后将cout替换为output

这将导致您的值被写入应用程序工作目录中名为“密度”的文件中。这将始终将数据写入同一个文件,因此如果您想在不同运行之间保留输出,请小心。

当你以后想读入那个文件时,你会做类似的事情。

 fstream input("densities");
 vector<double> values;

 // ... inside your loop
 double value;
 input >> value;
 values.push_back(value);

 // ... somewhere else use the values
 // for example, get the 11th density value.
 double density = values[10];

祝你好运!

【讨论】:

  • 我完全按照你写的去做:我在 cout 之前添加了你的行,并用输出替换了 cout。没用。可能少了点什么?谢谢
  • 什么不起作用?没有编译,输出文件为空,还是其他问题?
  • 输出文件不存在,我猜是少了一行什么的。此外,程序通常需要 2 秒。终止,变为 0.2 秒。修改后
  • 欢迎调试。您需要在函数的开始处设置断点并单步执行代码以查看失败的位置。很抱歉,我没有方便的 Windows 盒子在这里试用。一个提示是在声明流之后测试output.good()
  • 谢谢,我明天试试!
【解决方案3】:

假设您要存储的数据在程序运行时出现,您可以通过将输出重定向到文件来启动程序。

例如,在 linux、unix 或带有支持数据重定向的 shell 的操作系统中:

我的程序 > data.txt

然后您将在文件“data.txt”中看到相同的数据。

【讨论】:

  • 这将是一个简单的解决方案,但我正在寻找更有效的解决方案。我也在windows下……谢谢
  • 您可以使用数据库。即使可以将结构化的.txt 文件视为数据库,也已经存在许多高效且强大的工具。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2012-09-28
相关资源
最近更新 更多