- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含数据的二维 vector ,如果元素/ block 不需要考虑(基于谓词函数),我需要删除它们。这是函数:
bool thresholdNegative (vector<double> val)
{
//short threshold = 10000;
double meansquare = sqrt ( ( std::inner_product( val.begin(), val.end(), val.begin(), 0 ))/(double)val.size() );
if(meansquare < 0)
{
return true;
}else{
return false;
}
}
我使用以下内容:
std::remove_if(std::begin(d), std::end(d), thresholdNegative);
其中 d
是包含所有数据的二维 vector 。
问题是:它似乎没有从 block 中删除任何信息,即使 thresholdNegative
函数确实返回 true。
有什么想法吗?
最佳答案
这就是 remove_if
的工作原理。它实际上并没有从容器中移除任何东西(它怎么可能,它只得到两个迭代器?),而只是重新排序元素,以便那些应该留在容器中的元素聚集在容器的开头。然后该函数返回一个迭代器到容器的新末端,您可以使用它来实际删除元素。
d.erase( std::remove_if(begin(d), end(d), threshold_negative), end(d) );
上面一行使用了所谓的Erase-remove idiom。 .
关于C++ 使用 std::remove_if 删除二维 vector 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802604/
我有一个弱指针 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,
我是一名优秀的程序员,十分优秀!