2016-12-24 5 views
-1

イテレータを使ってリストに何かを挿入するには?例えば、私はオブジェクトmyobjのリストを持っています。ここで、myobjには別のlist<int>が含まれています。イテレータを使用してstd :: listに挿入するには?

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

は考えます私はinsert_iteratorを学ぼうとしたが、例のほとんどは、私が得た

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

ような何かをやる、xのn番目の要素にリストのためのinsert()関数を呼び出したいですcopy()機能で使用されましたが、ここではmyobjのリストの関数を呼び出したいと思います。

+0

コンパイラは 'list 'リストの 'list 'イテレータの使用を窒息するはずです。 –

+0

'std :: advance'を使ってイテレータを配置します。 –

答えて

0

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 ->()を使用してください。リスト内のオブジェクトが保持するメソッドにアクセスする必要があります。

+0

助けてくれてありがとう、それは私がやろうとしていることではありません。 \t 私はリスト 'list = x'を持っていますが、' x'に 'x'の' nth'要素に含まれるリストに挿入したくありません。 – Anon

+0

@Anonあなたの投稿を読んだ後にそれを見ました。それに対処するために編集されました。 –

+0

入手しました。ありがとうalot :) – Anon

0

したいコールはiterが指す位置にリストlvalueという名前のオブジェクトを挿入しl.insert(iter, value);

です。