C++ STL中forward_list::clear() 和 forward_list::erase_after()

C++ STL中forward_list::clear() 和 forward_list::erase_after()

STL中的forward list实现了单链表,这种容器自C++11引入,比其他容器在插入、删除和移动操作(如排序)方面更有用,并允许元素的常数时间插入和删除。它不同于list,因为forward list只跟踪下一个元素的位置,而list则跟踪下一个和上一个元素的位置。

forward_list::clear()

clear()函数用于删除forward list容器的所有元素,从而使其大小为0。

语法:

forwardlistname.clear()
参数:
不传参数。
结果:
forward list的所有元素都会被删除(或销毁)。

示例:

输入:flist{1, 2, 3, 4, 5};
         flist.clear();
输出:flist{}
输入:flist{};
         flist.clear();
输出:flist{}

错误和异常

1.不会抛出异常。

2.当传递参数时,会显示错误。

// CPP程序以说明
// clear()函数的实现
#include <forward_list>
#include <iostream>
using namespace std;
 
int main()
{
    forward_list<int> myflist{ 1, 2, 3, 4, 5 };
 
    myflist.clear();
    //forward list变为空

    //打印forward list
    for (auto it = myflist.begin(); it != myflist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出:

没有输出

时间复杂度: O(N)

辅助空间: O(1)

forward_list::erase_after()

erase-after()函数用于从容器中的指定位置或范围的下一个位置删除元素。

语法:

  1. flistname.erase_after(position)
  2. flistname.erase_after(startingposition, endingposition)
    参数:
    以迭代器的形式表示要删除的元素前面的位置,或使用开始和结束迭代器指定的范围。
    结果:
    从容器的下一个位置删除元素。

示例:

输入:flist{1, 2, 3, 4, 5},iterator=2,即iterator指向具有索引2的元素。
         flist.erase_after(iterator);
输出:1, 2, 3, 5

输入:flist{1, 2, 3, 4, 5, 6, 7, 8},iterator1=3,iterator2=6,即iterator1指向具有索引3的元素,
         iterator2指向具有索引6的元素。
         flist.erase_after(iterator1, iterator2);
输出:1, 2, 3, 4, 7, 8

错误和异常

1.如果位置有效,则它不会抛出任何异常。

2.否则显示未定义的行为。

从特定位置删除元素

// CPP程序以说明
// erase_after()函数的实现
#include <forward_list>
#include <iostream>
using namespace std;
 
int main()
{
    forward_list<int> myflist{ 1, 2, 3, 4, 5 };
    forward_list<int>::iterator it;
 
    it = myflist.begin();
    myflist.erase_after(it);
 
    //打印forward list
    for (auto it = myflist.begin(); it != myflist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出:

1 3 4 5

在范围内删除元素

// CPP程序,演示了erase_after()函数的实现
#include <forward_list>
#include <iostream>
using namespace std;
 
int main()
{
    forward_list<int> myflist{ 1, 2, 3, 4, 5 };
    forward_list<int>::iterator it1, it2;
 
    it1 = myflist.begin();
    it2 = myflist.end();
 
    myflist.erase_after(it1, it2);
 
    // 打印forward list
    for (auto it = myflist.begin(); it != myflist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出:

1

时间复杂度: O(N)

辅助空间复杂度: O(1)

让我们以表格形式看一下它们之间的差异:

ID forward_list::clear() forward_list::erase_after()
1. 它用于从forward_list容器中删除所有元素 它用于从forward_list容器中删除单个元素或一段元素。
2. 它的语法是-: clear(); 它的语法是-: 迭代器 erase_after (const_iterator position);
3. 它不带任何参数。 它只需要两个参数,即-: 1.指向forward_list容器中一个元素的迭代器。 2.指向要删除的最后一个元素之后的元素的迭代器。
4. 它没有任何返回值。 它的复杂度是线性的。
5. 它的复杂度是线性的。 它位于头文件中。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程