【问题标题】:C++ vector of ofstream, how to write to one particular elementofstream的C ++向量,如何写入一个特定元素
【发布时间】:2013-04-01 02:49:13
【问题描述】:

为了避免不断打开和关闭我正在写入的多个文件,我正在尝试使用 ofstream 对象的向量。到目前为止,我的代码如下所示:

std::vector<shared_ptr<ofstream>> filelist;

void main()
{
  for(int ii=0;ii<10;ii++)
  {
     string filename = "/dev/shm/table_"+int2string(ii)+".csv";
     filelist.push_back(make_shared<ofstream>(filename.c_str()));
  }

}

我正在使用 ofstream 指针向量,因为 ofstream 没有复制构造函数。此外,我正在使用共享指针,因为它应该更能防止内存泄漏。

以上成功在目标目录下创建了我想要的文件。如果我想关闭文件,我可以做类似 filelist[5]->close();

我不确定的唯一部分是我如何实际写入每个文件。通常,对于单个文件,我会执行以下操作:

ofstream fout;
fout.open("myfile.txt");
fout<<"some text"<<endl;

在这种情况下我想使用的

【问题讨论】:

  • 我想你想在这里使用unique_ptr 而不是shared_ptr
  • 你能评论一下为什么在这种情况下 unique_ptr 会比 shared_ptr 更好吗?谢谢。
  • 我假设每个指针都指向不同的文件流,并且您不希望有其他指针。 shared_ptr 用于当您有多个指针指向同一个对象时。
  • 在您当前的代码中,您可以执行以下操作:filelist.push_back(filelist[0]);,这会使后推的指针指向与第一个指针相同的文件流。

标签: c++ pointers vector ofstream


【解决方案1】:

试试这个:

for (auto& stream : filelist)
{
    *stream << "some text" << std::endl;
}

【讨论】:

  • (*a) &lt;&lt; "some text" 不够吗?
【解决方案2】:

您需要ostreamostream&amp;

filelist[i]shared_ptr&lt;ostream&gt;,在这种情况下,您可以将其视为基本上是 ostream*。这意味着*filelist[i] 为您提供ostream&amp;(通过operator* 重载)。所以,你会使用类似*filelist[i] &lt;&lt; "some text &lt;&lt; std::endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2016-08-20
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多