remove_if中的一元谓词是否会产生副作用?

4

如果这些都不是修改容器的选项呢?比如我想输出我从向量中删除的所有整数(我不想使用多个步骤:例如分区+输出+删除)。撇开设计上的不良之处,这合法吗?

v.erase(remove_if(v.begin(), v.end(), [] (const int i) -> bool 
                                  { 
                                    if (i%2==0)
                                    {
                                       cout << i << endl;
                                       return true;
                                    }
                                    else return false;
                                   }, v.end());

据我所知,标准保证对每个元素只应用一次谓词,所以我很满意,因为我不关心顺序...
1个回答

3
标准确实保证了这一点,所以你不用担心。但是除了调试之外,我仍认为这是不好的风格。

我和一个喜欢C语言的同事争论了一番,你知道这是怎么回事...就像我说的,我在实际代码中可能会使用partition + cout + erase... :) 这只是一个性能问题。 :D - NoSenseEtAl
如果您认为partition + counting + erase不好,请告诉我,以便我可以编辑问题。 - NoSenseEtAl
2
不,分区,然后计算结束之前擦除它,这正是我会做的方式。 - Sebastian Redl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接