0

我正在尝试连接 back_inserter_iterator 和 cin,我知道我可以将 copy 与 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&&'</p>

谢谢

4

3 回答 3

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));
于 2013-04-23T15:26:49.810 回答
3

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

原因在于设计std::back_insert_iterator

该类型仅在使用时执行反向插入operator =。这就是为什么std::copy 有效

于 2013-04-23T15:23:55.687 回答
0

运算符>>() 不是插入运算符,它是提取运算符。后插入器对象需要插入,而不是提取。总而言之,没有运算符>>(istream,插入器)。

于 2013-04-23T15:50:15.787 回答