无法使用back_insert_iterator连接cin

时间:2013-04-23 15:21:28

标签: c++ stl

我正在尝试连接back_inserter_iterator和cin,我知道我可以使用cin和back_inserter复制,但想知道为什么我不能执行下面的

list<string> name;
back_insert_iterator<list<string>> ins_it(name);

while (cin >> ins_it);

以下是我收到的错误消息:

  

错误:无法绑定'std :: istream {aka std :: basic_istream}'   左值'std :: basic_istream&amp;&amp;'

由于

3 个答案:

答案 0 :(得分:3)

  

想知道为什么我不能执行以下...

原因是std::back_insert_iterator的设计。

该类型仅在使用operator =时执行后向插入。这就是std::copy 工作的原因。

答案 1 :(得分:3)

规范的方法(如果有这样的事情):

list<string> name{
    istream_iterator<string>{cin}, 
    istream_iterator<string>{}};

或:

list<string> name;
copy(istream_iterator<string>{cin}, istream_iterator<string>{},
    back_inserter(name));

答案 2 :(得分:0)

运算符&gt;&gt;()不是 insert 运算符,它是 extract 运算符。 后插入器对象需要插入,而不是提取。 总而言之,没有运算符&gt;&gt;(istream,inserter)。