7
// ((++currentEntry)--) is equivalent to (currentEntry + 1). Kind of.
menuEntries.insert((++currentEntry)--, newEntries.begin(), newEntries.end());

だから私はここに世界最悪のコードを持っています。これを行うためのより良い方法はありますか?

'+ 1'を使用すると、次のようになります。

source/menu.cpp:146:37: error: invalid operands to binary expression
      ('list<menuEntry *>::iterator' (aka '_List_iterator<menuEntry *>') and
      'int')
                            menuEntries.insert(currentEntry + 1, ...
                                               ~~~~~~~~~~~~ ^ ~
4

5 に答える 5

8

複数の行に分割してみませんか:

iterator nextEntry = currentEntry;
menuEntries.insert( ++nextEntry, newEntries.begin(), newEntries.end());

iteratorリストのイテレータタイプはどこですか。個人的には、++nextEntryさらに明確にするために、おそらく独自の線を引くでしょうが、それはおそらく主観的な決定です。

于 2010-11-03T19:31:00.760 に答える
4

ヘルパー関数はどうですか?

template<class IterT>
IterT Next(IterT i)
{
  return ++i;
}

その後、次のように置き換えることができ(++currentEntry)--ますNext(currentEntry)

編集: またはさらに良い:Boostを使用する場合は、ユーティリティライブラリの次および前のRobの提案を参照してください

于 2010-11-03T20:01:21.770 に答える
0
++currentEntry;
menuEntries.insert(currentEntry, newEntries.begin(), newEntries.end());
--currentEntry;

また

menuEntries.insert(++currentEntry, newEntries.begin(), newEntries.end());
--currentEntry;
于 2010-11-03T19:30:32.790 に答える
0

次に、逆イテレータを使用できます。

myList.insert(myList.rbegin(), newEntries.begin(), newEntries.end())

最後に新しいアイテムを追加します。

もちろん、これが機能するかどうかは、イテレータをどのように使用しているかによって異なります。

于 2010-11-03T19:31:27.813 に答える
0

currentEntryイテレータに影響を与えたくないし、currentEntryの後にメンバーを挿入したいので、currentEntry+1が最善の策です。

于 2010-11-03T19:31:43.537 に答える