Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;流的向量,如何写入一个特定元素_C++_Pointers_Vector_Ofstream - Fatal编程技术网

C++ C++;流的向量,如何写入一个特定元素

C++ C++;流的向量,如何写入一个特定元素,c++,pointers,vector,ofstream,C++,Pointers,Vector,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_sh

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

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()));
  }

}
std::向量文件列表;
void main()
{
对于(int ii=0;iiclose()

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

ofstream fout;
fout.open("myfile.txt");
fout<<"some text"<<endl;
流源的
;
打开(“myfile.txt”);
fout试试这个:

for (auto& stream : filelist)
{
    *stream << "some text" << std::endl;
}
for(自动&流:文件列表)
{
*stream试试这个:

for (auto& stream : filelist)
{
    *stream << "some text" << std::endl;
}
for(自动&流:文件列表)
{

*流您需要一个
ostream
ostream&


filelist[i]
是一个
shared\u ptr
,在本例中,您可以将其基本上看作是一个
ostream*
。这意味着
*filelist[i]
为您提供了一个
ostream&
(通过重载)。因此,您可以使用类似于
*filelist[i]的东西您需要一个
ostream
ostream&


filelist[i]
是一个
shared\u ptr
,在本例中,您可以将其视为基本上是一个
ostream*
。这意味着
*filelist[i]
为您提供了一个
ostream&
(通过重载)。因此,您可以使用类似
*filelist[i]的东西
(*a)不会
(*a)我想你想在这里使用
unique\u ptr
而不是
shared\u ptr
。你能解释一下为什么在这种情况下,unique\u ptr比shared\u ptr更好吗?谢谢。我假设每个指针指向不同的文件流,你不想有其他指针。
shared\u ptr
是在你有多个指针时使用的指向同一对象。在当前代码中可以执行此操作:
filelist.push_back(filelist[0])
这使得被推后的指针指向与第一个指针相同的文件流。我认为您希望在此处使用
unique_ptr
而不是
shared_ptr
。您能评论一下为什么在这种情况下,unique_ptr比shared_ptr更好吗?谢谢。我假设每个指针指向不同的文件流,而您不会希望有其他指针。
shared\u ptr
用于多个指针指向同一对象。在当前代码中,您可以这样做:
filelist.push\u back(filelist[0]);
这使被推后的指针指向与第一个指针相同的文件流。