【问题标题】:How to insert in a std::list using iterator?如何使用迭代器插入 std::list?
【发布时间】:2016-12-24 17:11:45
【问题描述】:

如何使用迭代器在列表中插入内容?例如,我有一个对象列表myobj,其中myobj 包含另一个list<int>

class myobj {
    //other data goes here
    list<int> l;
};
list <myobj> x;

假设我想为x的第n个元素中的列表调用insert()函数,我会这样做

list<myobj>::iterator itr = x.begin();
std::advance(itr,n);
itr->insert(n); //It gives a compilation error.

我尝试学习insert_iterator,但我得到的大多数示例都与copy()函数一起使用,但在这里我想调用myobj内列表的insert()函数。

【问题讨论】:

  • 编译器应该会因为你在 list&lt;int&gt; 列表上使用 list&lt;int&gt; 迭代器而窒息。
  • 使用std::advance 定位迭代器。

标签: c++ list c++11 stl


【解决方案1】:

没有为 std::list 迭代器定义 operator +=()。要推进您的迭代器,请使用std::advance

http://en.cppreference.com/w/cpp/iterator/advance

auto iter = x.begin();
std::advance(iter,n);

请记住,您要确定您的列表足够大,可以用于您尝试执行的迭代。

访问内容:

iter->l.insert(n);

使用迭代器时,'.'运算符返回迭代器持有的方法。如果您取消引用迭代器,(*iter). 或使用 operator -&gt;() 您应该可以访问列表中对象持有的方法。

【讨论】:

  • 感谢您的帮助,但这不是我想要做的。我有一个列表list&lt;myobj&gt; = x,我不想插入到x,而是插入到包含在xnth 元素的列表中。
  • @Anon 在我重读您的帖子后看到了这一点。编辑以解决这个问题。
  • 知道了。非常感谢:)
  • 一些迭代器有operator+=——只有那些随机访问迭代器类别,std::list&lt;T&gt;::iterator不是,原因很明显。
  • @Brian 谢谢先生。编辑以反映这一点。
【解决方案2】:

你要的电话是l.insert(iter, value);

这会将名为value 的对象插入l 列表中iter 指向的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 2023-03-05
    • 2020-11-22
    • 2020-12-02
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多