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]);
这使被推后的指针指向与第一个指针相同的文件流。