📅  最后修改于: 2023-12-03 15:30:26.364000             🧑  作者: Mango
Deque(双向队列)是一个数据结构,与vector相似,但不同在于deque中的元素可以从两端进行插入和删除操作。在C++ STL中,deque通过容器类deque
元素类型已知的deque对象可以通过以下方式进行创建:
#include <deque>
using namespace std;
deque<int> myDeque; // 创建一个空的整数型deque对象
deque<string> myOtherDeque; // 创建一个空的字符串型deque对象
要在deque的特定位置插入一个或多个元素,可以使用以下函数:
iterator insert (const_iterator position, const value_type& val);
void insert (const_iterator position, size_type n, const value_type& val);
template <class InputIterator>
void insert (const_iterator position, InputIterator first, InputIterator last);
例如:
#include <iostream>
#include <deque>
using namespace std;
int main () {
deque<int> myDeque;
deque<int>::iterator it;
myDeque.push_back(1); // 1
myDeque.push_back(2); // 1 2
myDeque.push_front(3); // 3 1 2
it = myDeque.begin();it++;
myDeque.insert(it, 4); // 3 4 1 2
it = myDeque.begin();it++;
deque<int> myOtherDeque (2,5);
myDeque.insert(it,myOtherDeque.begin(),myOtherDeque.end()); // 3 5 5 4 1 2
cout << "myDeque contains:";
for (it=myDeque.begin(); it!=myDeque.end(); ++it)
cout << ' ' << *it;
cout << '\n';
return 0;
}
运行结果为:
myDeque contains: 3 5 5 4 1 2
要从deque的特定位置删除一个或多个元素,可以使用以下函数:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
void pop_back();
void pop_front();
例如:
#include <iostream>
#include <deque>
using namespace std;
int main () {
deque<int> myDeque;
deque<int>::iterator it;
myDeque.push_back(1); // 1
myDeque.push_back(2); // 1 2
myDeque.push_front(3); // 3 1 2
it = myDeque.begin();it++;
myDeque.insert(it, 4); // 3 4 1 2
it = myDeque.begin();it++;
deque<int> myOtherDeque (2,5);
myDeque.insert(it,myOtherDeque.begin(),myOtherDeque.end()); // 3 5 5 4 1 2
it = myDeque.end();it--;
myDeque.erase(it); // 3 5 5 4 1
myDeque.pop_front(); // 5 5 4 1
cout << "myDeque contains:";
for (it=myDeque.begin(); it!=myDeque.end(); ++it)
cout << ' ' << *it;
cout << '\n';
return 0;
}
运行结果为:
myDeque contains: 5 5 4 1
要访问deque中的元素,可以使用以下函数:
reference operator[] (size_type n);
reference at (size_type n);
reference front();
reference back();
例如:
#include <iostream>
#include <deque>
using namespace std;
int main () {
deque<int> myDeque;
deque<int>::iterator it;
myDeque.push_back(1); // 1
myDeque.push_back(2); // 1 2
myDeque.push_front(3); // 3 1 2
it = myDeque.begin();it++;
myDeque.insert(it, 4); // 3 4 1 2
it = myDeque.begin();it++;
deque<int> myOtherDeque (2,5);
myDeque.insert(it,myOtherDeque.begin(),myOtherDeque.end()); // 3 5 5 4 1 2
cout << "myDeque contains:";
for (size_t i=0; i<myDeque.size(); i++)
cout << ' ' << myDeque[i];
cout << '\n';
return 0;
}
运行结果为:
myDeque contains: 3 5 5 4 1 2
deque提供了许多其他有用的函数,如size()、empty()、clear()等函数。
例如:
#include <iostream>
#include <deque>
using namespace std;
int main () {
deque<int> myDeque;
deque<int>::iterator it;
myDeque.push_back(1); // 1
myDeque.push_back(2); // 1 2
myDeque.push_front(3); // 3 1 2
it = myDeque.begin();it++;
myDeque.insert(it, 4); // 3 4 1 2
it = myDeque.begin();it++;
deque<int> myOtherDeque (2,5);
myDeque.insert(it,myOtherDeque.begin(),myOtherDeque.end()); // 3 5 5 4 1 2
myDeque.clear();
cout << "Size of myDeque: " << myDeque.size() << endl;
if (myDeque.empty())
cout << "myDeque is empty" << endl;
return 0;
}
运行结果为:
Size of myDeque: 0
myDeque is empty
以上就是关于C++ STL中deque的介绍,包括创建、双向插入、双向删除、访问元素以及其他函数。Deque在实际编程中非常有用,它能够处理插入和删除操作,而不强制将所有元素移动到数组尾部或开头完成这些操作。