开发者社区> 问答> 正文

如何直接从input-stream-iterator表示的元素范围中初始化整数向量?

再次阅读C ++ Primer 5th Edition:我正在练习流迭代器。这是我无法真正理解的示例:

书中有一个这样的例子:

std::istream_iterator in_iter(std::cin), eof; std::vector vec; while (in_iter != eof) vec.push_back(*in_iter++); std::sort(vec.begin(), vec.end()); std::copy(vec.cbegin(), vec.cend(), std::ostream_iterator (std::cout, " ")); 该程序将使用npput流迭代器从输入流中读取整数序列,将其排序为向量,对它们进行排序,然后使用输出流迭代器将其复制到输出流中。

我不想更改代码:事实上a vector是可以由两个迭代器表示的一系列元素构造的容器,因此我做到了:

std::vector vi(std::istream_iterator (std::cin), std::istream_iterator ()); // error here?!

//std::copy(iit, off, std::back_inserter(vi)); std::sort(vi.begin(), vi.end()); // error? std::copy(vi.cbegin(), vi.cend(), std::ostream_iterator (std::cout, ", ")); // error? 但是,初始化vi标志会出错:Severity Code Description Project File Line Suppression State Error (active) expression must have class type.

但是,如果我将其更改为构造uniform-initialize函数中的Off-End迭代器,vi则可以正常工作!

std::vector<int> vi(std::istream_iterator<int>(cin), std::istream_iterator<int>{});  // works fine!?

**实际上,这是:

std::vector<int> vi(std::istream_iterator<int>(std::cin), std::istream_iterator<int>()); // error here?!

不标记错误,但copy算法标记错误。因为我认为向量内部有问题?毕竟您能解释一下这个向量有什么吗?

展开
收起
被纵养的懒猫 2019-09-24 20:23:40 479 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《Proxima:多模态向量检索引擎》 立即下载
高维向量检索技术在PG中的设计与实践 立即下载
低代码开发师(初级)实战教程 立即下载