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()函数用于从容器中的指定位置或范围的下一个位置删除元素。
语法:
- flistname.erase_after(position)
- 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. | 它的复杂度是线性的。 | 它位于 |