首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gecode打印文件

使用Gecode打印文件
EN

Stack Overflow用户
提问于 2013-10-27 19:53:48
回答 1查看 257关注 0票数 0

我正在做一个Gecode项目,代码应该输出一个文件,如下所示:

代码语言:javascript
复制
n: 17
x: {0, 0, 16, 18, 17, 31, 32, 0, 34, 10, 30, 37, 38, 30, 30, 10}
y: {0, 27, 28, 14, 0, 31, 20, 17, 11, 17, 0, 0, 6, 7, 11, 25}
s: 43
runtime: 0.137
failure: 127

上面的例子说明了代码应该输出什么。我尝试执行以下代码:

代码语言:javascript
复制
virtual void
print(std::ostream& os) const {
    string filename = "project1-t15-n" + n + ".txt";

    ofstream myfile;
    myfile.open (filename);

    myfile << "n: " << n << std::endl;
    myfile << "x: {";
    for (int i = 0; i < x.size(); i++) {
        if (i != 0) {
            myfile << ", ";
        }
        myfile << x[i];
    }
    myfile << "}" << std::endl;
    myfile << "y: {";
    for (int i = 0; i < y.size(); i++) {
        if (i != 0) {
            myfile << ", ";
        }
        myfile << y[i];
    }
    myfile << "}" << std::endl;
    myfile << "s: " << s << std::endl;

    //???????????????????????????????? print runtime and failures

    myfile.close();
}

我知道n,s,x和y是正确的,但我有两个问题:

1:将print(std::ostream& os) const打印到文件时是否正确使用?

2:如何从Gecode输出获得运行时和故障?它们在打印功能中的内置实现了这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-27 20:02:35

myfile << "s: " << s << std::endl;我没有在你的代码中看到任何s,它是什么?此外,打印方法的签名表明它已经获得输出流。这是真的吗?谁叫它,从哪里,用什么论点?如果其他方法真的调用print并给它输出流,那么您可能应该使用它,而不是创建自己的输出流。

更新:查看了Gecode的文档,发现了print()的定义:

source.html#l00666

因此,您可以在您自己的类中重新定义这个方法,它是从ScriptBase派生而来的(我猜这就是您应该如何为Gecode编写内容),但是您应该使用提供的参数,即:

代码语言:javascript
复制
    virtual void
    print(std::ostream& os) const {
        os << "n: " << n << std::endl;
        os << "x: {";
// etc

实际打印到特定文件i/o控制台的一个选项是,使用重路由输出运行您的程序。例如,如果您的程序名为myprogram,而您的文件名为myfile.txt,请按以下方式运行它:

代码语言:javascript
复制
myprogram >> myfile.txt

它会将所有内容打印到文件中,而不是控制台。

此外,如果您有ScriptBase派生类S,那么docs ( http://www.gecode.org/doc-latest/MPG.pdf )可以直接从main()方法调用它的方法S->print(),并在那里提供正确的文件流,即:

代码语言:javascript
复制
S* s= new S; // something like that
ofstream f("myfile.txt");
s->print(f);
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19622740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档