gpt4 book ai didi

c++ - 使用 Gecode 打印到文件

转载 作者:行者123 更新时间:2023-11-28 07:20:07 24 4
gpt4 key购买 nike

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

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

以上是代码应输出的示例。我尝试执行以下代码:

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 输出中获取运行时间和故障?他们内置的打印功能可以做到这一点。

最佳答案

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

更新:查看了 Gecode 的文档,找到了定义 print() 的地方:

http://www.gecode.org/doc-latest/reference/driver_8hh_source.html#l00666

所以你可以在你自己的类中重新定义这个方法,它继承自 ScriptBase(我想这就是你应该如何为 Gecode 编写这些东西),但是你应该使用提供的参数,即:

    virtual void
print(std::ostream& os) const {
os << "n: " << n << std::endl;
os << "x: {";
// etc

实际打印到特定文件 i/o 控制台的一个选项是简单地运行带有重新路由输出的程序。例如。如果您的程序名为 myprogram 并且您的文件名为 myfile.txt,请将其运行为:

myprogram >> myfile.txt

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

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

S* s= new S; // something like that
ofstream f("myfile.txt");
s->print(f);
...

关于c++ - 使用 Gecode 打印到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19622740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com