C++ STL中的forward_list::remove()和forward_list::remove_if()

C++ STL中的forward_list::remove()和forward_list::remove_if()

STL中的正向链表实现了 单向链表 。正向链表是在C++11中引入的,比其他容器在插入、删除和移动操作(如排序)上更加有用,并允许元素的时间常量插入和删除。它与列表的不同之处在于,正向链表仅跟踪下一个元素的位置,而列表则跟踪下一个和上一个元素的位置。

forward_list::remove()

remove() 函数用于从前向列表中删除与函数参数值相对应的所有值。此函数归类于 < forward_list>头文件。

语法:

forwardlistname.remove(value)

参数: 作为参数传递要删除元素的值。

结果: 删除与参数传递的值相等的所有容器元素。

时间复杂度: 与容器大小成线性关系。

示例:

输入:forward_list forwardlist{1, 2, 3, 4, 5};
    forwardlist.remove(4);
输出:1, 2, 3, 5

输入:forward_list forwardlist{1, 2, 2, 2, 5, 6};
    forwardlist.remove(2);
输出:1, 5, 6

错误和异常:

  • 如果传递的值与正向列表的类型不匹配,则会显示错误。
  • 如果值和正向列表的元素之间的比较不引起任何异常,则不会引发异常。
// CPP program to illustrate
// Implementation of remove() function
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    forward_list<int> myforwardlist{ 1, 2, 2, 2, 5, 6, 7 };
    myforwardlist.remove(2);
    for (auto it = myforwardlist.begin();
         it != myforwardlist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出:

1 5 6 7

forward_list::remove_if()

remove_if() 函数用于删除所有与作为函数参数给出的谓词或条件为真的列表值。函数遍历列表容器中的每个成员,并删除为谓词返回真的所有元素。此函数归类于 < forward_list>头文件。

语法:

forwardlistname.remove_if(predicate)

参数: 以函数指针或函数对象形式传递谓词。

结果: 删除所有返回true的容器元素谓词。

时间复杂度: 与容器大小成线性关系。

示例:

输入:forward_list forwardlist{1, 2, 3, 4, 5};
    forwardlist.remove_if(odd);
输出:2, 4

输入:forward_list forwardlist{1, 2, 2, 2, 5, 6, 7};
    forwardlist.remove_if(even);
输出:1, 5, 7

错误和异常: 异常约束无异常抛出。

// CPP program to illustrate implementation
// of remove_if() function
#include <forward_list>
#include <iostream>
using namespace std;
 
// Predicate implemented as a function
bool even(const int& value) { return (value % 2) == 0; }
 
// Driver Code
int main()
{
    forward_list<int> myforwardlist{ 1, 2, 2, 2, 5, 6, 7 };
    myforwardlist.remove_if(even);
    for (auto it = myforwardlist.begin();
         it != myforwardlist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出

 1 5 7

应用remove_if(): 给定一个整数列表,从列表中删除所有质数并输出列表。

输入:2, 4, 6, 7, 9, 11, 13
输出:4, 6, 9
// CPP program to illustrate
// Application of remove_if() function
#include <forward_list>
#include <iostream>
using namespace std;
 
// Predicate implemented as a function
bool prime(const int& value)
{
    int i;
    for (i = 2; i < value; i++) {
        if (value % i == 0) {
            return false;
            ;
            break;
        }
    }
    if (value == i) {
        return true;
        ;
    }
}
 
// Driver Code
int main()
{
    forward_list<int> myforwardlist{
        2, 4, 6, 7, 9, 11, 13
    };
    myforwardlist.remove_if(prime);
    for (auto it = myforwardlist.begin();
         it != myforwardlist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出

 4 6 9

让我们以表格形式比较它们的不同之处 -:

ID forward_list::remove() forward_list::remove_if()
1. 它用于从容器中删除与val相等的所有元素。 它用于从容器中删除Predicate pred返回true的所有元素。
2. 它的语法为-:remove (const value_type& val); 它的语法为-:remove_if (Predicate pred);
3. 它的返回值是void类型。 它的返回值是void类型。
4. 它需要一个参数,即要删除的元素的值。 它需要一个参数,即一元谓词。
5. 它的复杂度是线性的。 它的复杂度是线性的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程