再次阅读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算法标记错误。因为我认为向量内部有问题?毕竟您能解释一下这个向量有什么吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。