版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013919153/article/details/82387459
#define VNAME(value) {cout<<(#value)<<":"<<endl;}
template<class T>
void print_elemnt(T &v)
{
for(auto i : v)
cout<<i<<" ";
cout<<endl;
}
/************************************************************************/
/* 简介:
* deque是集vector和list集合的优点,访问速度快,首尾插入速度快,因此,操作类似
* 但是也有缺点,中间插入巨慢,因为和它的底层数据结构有关,多个块连接起来的。
/************************************************************************/
void test_deque()
{
deque<int> a;
deque<int> b(4); //分配4个数据,默认值为0
deque<int> c(4,5); //分配4个5
deque<int> d(c.begin(),c.begin()+3); //区间构造
deque<int> e(b); //拷贝构造
deque<int> h;
a = c;
/*
迭代器:begin,end,rbegin,rend及对应的const
*/
cout<<" size of a is :"<<a.size()<<endl;
cout<<" max_size of a is :"<<a.max_size()<<endl;
cout<<" first element is :"<<a.front()<<endl;
cout<<" first element is :"<<a[0]<<endl;
cout<<" first element is :"<<a.at(0)<<endl;
cout<<" last element is :"<<a.back()<<endl;
//a.resize(n,val);
//a.shrink_to_fit();
//a.assign(n,val); //赋值n个val给a
//a.assign(c.begin(),c.begin()+2);
b.push_back(9);
b.push_front(1);
b.pop_back();
b.pop_front();
auto npos = c.begin();
//c.insert(npos,6); //在npos位置插入6,插入之后注意迭代器失效问题
c.insert(npos,3,6); //在npos位置插入3个6
//c.insert(npos,d.begin(),d.begin()+2);
auto ipos = c.begin();
c.emplace(ipos,1,2,3); //emplace参数可变
VNAME(h);
print_elemnt(h);
h.emplace_front(34);
h.emplace_back(65,45);
print_elemnt(h);
/*
*emplace() 和 insert()
*前者可以插入多个数据,省去多次构造临时变量;后者插入数据的副本
*/
auto jpos = a.begin();
a.erase(jpos); //删除一个或者一段区间[,),返回指向下一个元素的迭代器,遍历时不要弄错了
a.swap(b); //交换数据
a.clear(); //清空数据
if(a.empty())
{
cout<<"a is empty"<<endl;
}
VNAME(a);
print_elemnt(a);
VNAME(b);
print_elemnt(b);
VNAME(c);
print_elemnt(c);
VNAME(d);
print_elemnt(d);
VNAME(e);
print_elemnt(e);
cout<<endl<<endl;
}