我应该如何使用remove_if删除两个数字范围内的元素
How should i use remove_if to delete elements in range of two numbers
我创建了类并在私有字段中初始化了一个向量,然后我使用我的类的方法初始化了向量。 现在我需要删除必须在键盘上键入的两个数字范围内的元素
#include <iostream>
#include <vector>
#include <algorithm>
int randomNumber()
{
return (0 + rand() % 50 - 10);
}
class Array {
vector<int>::iterator p;
public:
vector<int>array;
Array(int size)
{
array.resize(size);
generate(array.begin(), array.end(), randomNumber);
}
void Print() {
for (p = array.begin(); p != array.end(); p++) {
cout << *p << ' ';
}
cout << endl;
}
void Condense() {
int a, b;
cout << "Enter your range: [";
cin >> a;
cin >> b;
cout << "]" << endl;
for (p = array.begin(); p != array.end(); p++) {
if (a < *p < b || a > *p < b) {
}
}
}
};
这是一个演示程序,展示了如何在( a, b )
范围内删除矢量的元素。
#include <iostream>
#include <vector>
#include <tuple>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << 'n';
int a = 7, b = 2;
std::tie( a, b ) = std::minmax( { a, b } );
auto inside_range = [&]( const auto &item )
{
return a < item && item < b;
};
v.erase( std::remove_if( std::begin( v ), std::end( v ), inside_range ),
std::end( v ) );
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << 'n';
return 0;
}
它的输出是
0 1 2 3 4 5 6 7 8 9
0 1 2 7 8 9
与其使用 std::minmax 和 std::tie 来排序 a 和 b,不如这样写条件
auto inside_range = [&]( const auto &item )
{
return a < item && item < b || b < item && item < a;
};
至于你的代码,那么 if 语句中的条件
if ( a < *p < b || a > *p < b) {
不正确,你的意思是
if (a < *p && *p < b || b < *p && *p < a ) {
相关文章:
- C++通过数字比较两个数字
- 将向量之间的数字放在另一个向量之间<vector>>如果两个数字的差值为 1
- 在 txt 文件中显示前两个数字的程序
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- 两个数字的对称配对功能
- 查找中间两个数字的正则表达式的匹配项
- 使用C++具有两个数字的最短路径算法.(C++)
- 将两个数字添加为链表
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 我应该如何使用remove_if删除两个数字范围内的元素
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 子数组中两个数字的相同出现(连续)
- 如何使用位操作在单个整数中编码和解码两个数字
- 在 c++ 程序中调试链表以添加两个数字: 有人可以解释为什么 l3=l3->next;导致错误?
- 钻头以两个数字替换位
- C 如何在小数系统中添加两个数字
- 为什么我的代码不给最后两个数字
- 如何在给出前两个数字的级数中找到大于 x 的第 n 个最小子数组总和?
- 输入两个数字后程序关闭
- 代码是否交换数组的两个数字