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在实用程序库中对 next 和 prior的建议

于 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 回答