双端数组,可以再头部进行插入删除操作
deque与vector区别:
1. vector对于头部的插入删除效率低,数据量越大,效率越低2. deque相对而言,头部插入删除快3. vector访问元素时的速度会比deque快。与内部实现有关。
| 成员函数 | 示例和描述 |
|---|---|
| push_back | iDeque.push back(7); 接受一个值作为参数插入到 deque 中。参数被插入在最后一个元素之后(被推到 deque 后面) |
| pop_front | iDeque.pop front(); 删除 deque 的第一个元素并丢弃它 |
| front | cout << iDeque.front() << endl; front 返回对 deque 第一个元素的引用 |
构造deque
deque<type> d;
for(int i = 0;i<=n;i++)
{
d.emplace_back(i);
}
deque<type> d2(d1.begin(),d1.end());
deque<type> d3(10,1);
deque<int> d4(d3);
遍历 const修饰后循环需要修改为const_iterator i =
void func(const deque<int>&d)
{
for (deque<int>::const_iterator i = d.begin();i != d.end();i++)
{
cout << *i << endl;
// const修饰不可修改deque内元素
}
}
front() back()第一个/最后一个元素的引用
插入和删除
push_back(elem); emplace_back(elem);
push_front(elem);
pop_back(elem);
pop_front(elem);
insert(pos,elem);
insert(pos,n,elem);
insert(pos,beg,end);
clear();
erase(beg,end);
erase(pos);
eg
#include <iostream>
#include<vector>
#include<deque>
#include<algorithm>
#include<string>
#include<ctime>
#include <numeric>
using namespace std;
class Person{
public:
Person(string name,int score)
{
this->m_name = name;
this->m_score = score;
}
string m_name;
int m_score;
};
void createPerson(vector<Person>&v)
{
string nameSeed = "ABCDE";
for (int i = 0; i <= 4;i++)
{
string name = "player";
name += nameSeed[i];
int score = 0;
Person p(name,score);
v.emplace_back(p);
}
}
void rate(vector<Person> &v)
{
for (auto& p:v)
{
deque<int> d;
for (int i = 0; i < 10;i++)
{
int score = rand()%41+60;
d.emplace_back(score);
}
sort(d.begin(), d.end());
/* cout << " rating for " << p.m_name << ": " << endl;
for (auto& i:d)
{
cout << i << " " << endl;
}
*/
d.pop_back();
d.pop_front();
p.m_score = accumulate(d.begin(), d.end(), 0) / d.size();
}
}
int main()
{
srand((unsigned int)time(NULL));
vector<Person> v;
createPerson(v);
rate(v);
for(auto& p:v)
{
cout << "name : " << p.m_name << " score : " << p.m_score << endl;
}
return 0;
}
name : playerA score : 81
name : playerB score : 76
name : playerC score : 72
name : playerD score : 88
name : playerE score : 81
queue
std::deque<int> values{ 1,2,3 };
std::queue<int> my_queue(values);//{1,2,3}
| 成员函数 | 功能 |
|---|---|
| empty() | 如果 queue 中没有元素的话,返回 true。 |
| size() | 返回 queue 中元素的个数。 |
| front() | 返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。 |
| back() | 返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。 |
| push(const T& obj) | 在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。 |
| emplace() | 在 queue 的尾部直接添加一个元素。 |
| push(T&& obj) | 以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。 |
| pop() | 删除 queue 中的第一个元素。 |
| swap(queue &other_queue) | 将两个 queue 容器适配器中的元素进行互换,需要注意的是,进行互换的 2 个 queue 容器适配器中存储的元素类型以及底层采用的基础容器类型,都必须相同。 |
