gpt4 book ai didi

c++ - 输入流的 vector ?

转载 作者:行者123 更新时间:2023-11-30 02:38:57 25 4
gpt4 key购买 nike

我想创建一个 vector 来存储不同输入流的列表,包括 cin 和一些文本文件。到目前为止,我有这个。

vector<istream> inStreams;
vector<istream>::iterator streamsIterator;

streamsIterator = inStreams.begin();
streamsIterator = inStreams.insert(streamsIterator, cin); ////this has error!
for (char i = 1; argv[i] != NULL; i++) {
streamsIterator = inStreams.insert(streamsIterator, ifstream(argv[i], ifstream::in));
}

问题是编译器吐出一个很大的错误,这个错误深入到我无法破译的模板库中。

最佳答案

这里有一些问题。首先是流不可复制,因此您不能将它们复制到容器中。尽管如果您有支持它的最新编译器,流是可移动的

然而,因为你想在一个多态的容器中存储不同的类型,你甚至不能移动它们。你不能在分配给一个空间的空间中存储一个 std::fstream std::istream 因为你得到 slicing (腐败)。

一种方法是使用指针在您的容器中存储:

int main(int, char* argv[])
{
std::vector<std::istream*> istreams;

istreams.push_back(&std::cin);

for(char** arg = argv + 1; *arg; ++arg)
{
istreams.push_back(new std::ifstream(*arg));
}
}

不幸的是,现在您遇到了所有权的问题。您添加的使用 new 创建的 std::ifstream 对象需要删除,但不应删除全局 std::cin 对象.

您如何解决该问题取决于您总体上尝试做什么,但将需要删除的指针与不应删除的指针混合在一起是有问题的。

关于c++ - 输入流的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30296782/

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