- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在阅读最新的 C++ 规范,但我无法弄清楚是否可以为同一元素多次调用 remove_if
。特别是,我正在查看在 deque
迭代器上调用的 std::remove_if
。据我所知,如果它所做的只是从第一个参数开始并一直迭代到第二个参数,那么它没有理由被调用多次。
我正在处理的代码使用手动引用计数,因此,如果 remove_if
谓词将返回 true,它将递减并删除底层对象引用。显而易见的问题是,这仅在 remove_if
谓词对每个元素仅调用一次时才有效,否则后续调用将访问已删除的对象。有些事情告诉我,这并不能保证是正确的,并且会出现一个点,即对于单个 remove_if
调用,相同的元素将两次传递给 remove_if
谓词。
如果您有某种实现迭代器的疯狂数据结构,并且说,为每个迭代器增量随机选择一个条目,直到它(随机)出现在结束迭代器上,我可以看到这将如何失败。但是对于像 deque
、vector
和 list
这样直接的标准化结构,是否可以将单个元素多次传递给谓词?
最佳答案
根据 a draft of the standard §23.3.4.6/14:
Complexity: Exactly distance(begin(), end()) applications of the corresponding predicate.
如果引用有点不对请见谅;这实际上是我第一次正式引用它。我希望这是您正在寻找的信息。
关于c++ - remove_if 谓词是否保证每个迭代器只调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572414/
我有一个弱指针 vector ,如果指针仍然存在,我想遍历该列表并执行一个函数。如果指针不见了,我想将其移除。 class my_class { public: std::shared_ptr
我一直在阅读最新的 C++ 规范,但我无法弄清楚是否可以为同一元素多次调用 remove_if。特别是,我正在查看在 deque 迭代器上调用的 std::remove_if。据我所知,如果它所做的只
我正在尝试从字符串中删除空格。但抛出错误。 我的代码哪个参数做错了..感谢您的查看 我的主要功能 #include #include #include #include #include #
在下面的示例中,我从列表中删除了 pr2 对其应用返回 true 的范围内的一些元素。 m_list.remove_if(pr2(*tmp_list)); 在我看来有必要删除上面删除的这个对象,因为当
如果那些没有修改容器?例如,我想输出我从 vector 中删除的所有整数(我不想使用多次传递:例如:partition + output + erase)。撇开设计恐怖不谈,这是合法的: v.eras
我想删除按引用传递的字符串中的第一个和最后一个括号。不幸的是,我很难有条件地删除第一个和最后一个元素。我不明白为什么 remove_if 不能像我期望的那样使用迭代器。 Demo #include
我想使用 remove_if 函数从 vector 中删除元素,但将删除限制为 N 个元素。 例子: // predicate function that determines if a value
VS2010编译错误: c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1840): error C2
有人可以告诉我如何使用 Remove_If 进行一些不区分大小写的比较吗? 目前我是这样做的: template struct is_literal { enum{value = false};
我正在考虑在下面的伪代码中对字符串 vector 使用 remove_if: for(some strings in a given set) { remove_if(myvec.begin(),
我正在尝试使用 std::remove_if从一个简单的字符串中删除空格,但我得到了奇怪的结果。有人可以帮我弄清楚发生了什么吗? 该代码是: #include #include #include
我的 remove_if 似乎正在用过滤掉的元素的值覆盖未过滤掉的元素。这些代码的目的是允许用户过滤和仅显示某个类别的教师。 (不删除任何元素)下面是部分代码 static string compar
我想知道是否可以使用 remove_if 和 lambda 表达式来表示此表达式。 std::list::iterator astit = actors.begin();
我收到的以下代码的错误消息是: error C2662: 'DamageNumbers::IsAlive' : cannot convert 'this' pointer from 'cons
我正在为具有硬编码最大元素数 N 的数据结构开发一种删除方法,它依赖于 std::array 来避免堆内存。虽然 std::array 只包含 N 个元素,但只有 M 个元素,其中 M 是“相关”元素
我正在尝试从字符串中删除空格 line.erase(remove_if(line.begin(), line.end(), isspace), line.end()); 但是 Visual Studi
我正在尝试使用 remove_if 从 vector 中删除对,但出现错误 bool MyClass::isSingleTag(const pair & val) { string tag =
这里的str是一个string: str.erase(std::remove_if(str.begin(), str.end(), &islower)); 似乎只删除字符串前面的小写字符。为什么会这样
我想知道如何根据条件从列表中删除对象。 经过研究,我得到了这个,但是还是不行! 所以我想知道如何使用带删除的remove_if。 Class A { public: A(int x,int y
我有密码 vector v; v.erase(remove_if(v.begin(),v.end(),bool_checker),v.end()); 其中 v 是一个包含随机数 {2, 4 ,5,
我是一名优秀的程序员,十分优秀!