📅  最后修改于: 2023-12-03 15:13:56.250000             🧑  作者: Mango
在C++的STL中,deque
被定义为双端队列容器,支持在队列的两端进行插入和删除操作。在本文中,我们将分别介绍 deque :: clear() 和 deque :: erase() 的用法和区别。
deque :: clear()
用于删除 deque 中的所有元素。其函数签名如下:
void clear() noexcept;
其函数原型只有一个参数,即无需传入任何参数。该函数会使 deque 中的所有元素被销毁,并将 deque 的大小(size)设置为 0。
下面是一个使用 deque :: clear()
删除 deque 所有元素的示例:
#include <iostream>
#include <deque>
int main()
{
std::deque<int> mydeque {1, 2, 3, 4, 5};
std::cout << "Deque size is: " << mydeque.size() << "\n";
mydeque.clear();
std::cout << "Deque size after clearing is: " << mydeque.size() << "\n";
return 0;
}
该代码会输出以下内容:
Deque size is: 5
Deque size after clearing is: 0
在本示例中,使用 clear()
函数后,mydeque
deque 中的所有元素被销毁,deque 的大小(size)被设置为 0。
deque :: erase()
用于删除 deque 中的特定元素或一定范围内的元素。其函数签名如下:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
其中,第一个函数原型用于删除指定迭代器指向的元素,第二个函数原型用于删除指定迭代器范围内的元素。
下面是一个使用 deque :: erase()
删除 deque 中指定迭代器指向的元素的示例:
#include <iostream>
#include <deque>
int main()
{
std::deque<int> mydeque {1, 2, 3, 4, 5};
auto it = mydeque.begin() + 2;
mydeque.erase(it);
std::cout << "Deque after erasing at position 2: ";
for (int& x : mydeque)
std::cout << x << " ";
std::cout << "\n";
return 0;
}
该代码会输出以下内容:
Deque after erasing at position 2: 1 2 4 5
在本示例中,使用 erase()
函数后,mydeque
deque 中 3 这个元素被删除,deque 中的其它元素会被移动以填补这个位置。
下面是使用 deque :: erase()
删除 deque 中指定范围内的元素的示例:
#include <iostream>
#include <deque>
int main()
{
std::deque<int> mydeque {1, 2, 3, 4, 5};
auto first = mydeque.begin() + 1;
auto last = mydeque.begin() + 3;
mydeque.erase(first, last);
std::cout << "Deque after erasing range [1,3): ";
for (int& x : mydeque)
std::cout << x << " ";
std::cout << "\n";
return 0;
}
该代码会输出以下内容:
Deque after erasing range [1,3): 1 4 5
在本示例中,使用 erase()
函数后,mydeque
deque 中 2 和 3 这两个元素被删除,deque 中的其它元素会被移动以填补这两个位置。