1, 기본 개념
기능 : 양두 배열 , 결실의 헤드 단부에 삽입 될 수있다
양단 큐 및 벡터 차이 :
벡터 헤드 삽입 및 삭제를위한 낮은 효율 , 데이터의 큰 양을 덜 효율적
양단 반대로 삽입 빠르게 헤드의 속도보다 벡터의 결실은
내부와 구현 모두의 빠른 액세스 속도 양단 요소 벡터보다 것 관련
반복자 양단 큐 컨테이너는 랜덤 액세스를 지원합니다
2, 생성자
기본 생성자 양식
deque<T> deqT
요소 자체의 복사의 생성자 [BEG 엔드) 섹션.
deque(beg,end)
ELEM n 개의의 생성자 자체에 복사합니다.
deque(n,elem)
복사 생성자
deque(const deque& deq)
당신이 데이터를 제한하려면 읽기 전용 상태, 다음 상태는 반복자를 변경해야합니다
#include<iostream>
using namespace std;
#include<deque>
void printDeque(const deque<int>&d)
{
for(deque<int>::const_iterator it=d.begin();it!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
//无参构造,默认构造
deque<int>d1;
for(int i=0;i<10;i++)
{
d1.push_back(i);
}
printDeque(d1);
//第二种
deque<int>d2(d1.begin(),d1.end()) ;
printDeque(d2);
//第三种
deque<int>d3(10,100) ;
printDeque(d3);
//第四种
deque<int>d4(d3);
printDeque(d4);
}
int main()
{
test01();
}
양단 및 벡터 컨테이너는 거의 동일하게 구성
3, 할당
항등 연산자 오버로딩
vector& operator=(const vector&vec)
데이터 구간의 [BEG 최종) 사본 자체에 할당
assign(beg,end)
자신에 할당 된 N 개의 복사본 ELEM
assign(n,elem);
다음 코드는
#include<iostream>
using namespace std;
#include<deque>
void printDeque(const deque<int>&d)
{
for(deque<int>::const_iterator it=d.begin();it!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
deque<int>d1;
for(int i=0;i<10;i++)
{
d1.push_back(i);
}
printDeque(d1);
//第一种
deque<int>d2;
d2=d1;
printDeque(d2);
//第二种
deque<int>d3;
d3.assign(d1.begin(),d1.end()) ;
printDeque(d3);
//第三种
deque<int>d4;
d4.assign(10,100);
printDeque(d4);
}
int main()
{
test01();
}
도 4에서, 용량, 동작의 크기
용기 양단의 크기 및 용량을 결정
컨테이너가 비어 있는지 여부 결정
empty()
컨테이너의 요소의 수를 돌려줍니다
size()
용기의 길이는 재 지정 NUM이고
resize(int num)
컨테이너가 오래 될 경우, 기본 위치에 새 값을 가득합니다. 컨테이너가 짧아지는 경우, 길이의 종료 이후 컨테이너의 요소는 삭제된다.
용기의 길이는 재 지정 NUM이고
resize(int num,elem);
컨테이너가 길어지면 값이 장소 ELEM 새로운 위치를 채우기 위해. 컨테이너가 짧아지는 경우, 용기의 구성 요소는 꼬리의 길이가 제거 초과하지
더 용량 개념,하지만 개념의 크기를 양단하지
가의 배열이기 때문에 더블 종료
다음 코드는
#include<iostream>
using namespace std;
#include<deque>
void printDeque(deque<int>&d)
{
for(deque<int>::iterator it=d.begin();it!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
deque<int>d1;
for(int i=0;i<10;i++)
{
d1.push_back(i);
}
printDeque(d1);
if(d1.empty())
{
cout<<"d1为空"<<endl;
}
else
{
cout<<"d1不为空"<<endl;
cout<<"d1的大小为:"<<d1.size()<<endl;
}
//重新指定大小
d1.resize(15,2);
printDeque(d1);
d1.resize(5);
printDeque(d1);
}
int main()
{
test01();
}
요약 :
어떤 용량의 개념을 양단 큐 없다
비어 ------ 빈 여부를 결정
요소 ----------- 크기 반환의 수
수 ------------ 크기 조정을 재 할당
5, 삽입 및 삭제
양단 큐에 삽입하고 데이터 삭제하기
프로토 타입 :
꼬리에 데이터 컨테이너를 추가
push_back(elem);
컨테이너 헤더 데이터를 삽입
push_front(elem)
마지막 데이터 컨테이너를 삭제
pop_back()
첫 번째 컨테이너 데이터를 삭제
pop_front()
지정 작업의 위치 :
pos의 위치 ELEM 요소, 새로운 데이터의 반환 위치의 사본 삽입
insert(pos,elem)
삽입물 N ELEM 데이터 pos 위치 없음 리턴 값.
insert(pos,n,elem)
在pos位置插入[beg.end)区间的数据,无返回值。
insert(pos,beg,end)
清空容器的所有数据
clear()
删除[beg.end)区间的数据,返回下一个数据的位置。
erase(beg,end)
删除pos位置的数据,返回下一个数据的位置。
erase(pos)
其中,pos都是迭代器
代码如下
#include<iostream>
using namespace std;
#include<deque>
void printDeque(deque<int>&d)
{
for(deque<int>::iterator it=d.begin();it!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
//两端操作
void test01()
{
deque<int> d;
//尾插
d.push_back(10);
d.push_back(20);
//头插
d.push_front(100);
d.push_front(200);
//200 100 10 20
printDeque(d);
//尾删
d.pop_back();
//200 100 10
printDeque(d);
//头删
d.pop_front();
//100 10
printDeque(d);
}
void test02()
{
deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_front(100);
d.push_front(200);
//200 100 10 20
printDeque(d);
d.insert(d.begin(),1000);
//1000,200 100 10 20
printDeque(d);
d.insert(d.begin(),2,1000);
//1000,1000,1000,200 100 10 20
printDeque(d);
//指定位置插入区间
deque<int> d2;
d2.push_back(1);
d2.push_back(2);
d2.push_front(10);
d2.push_front(20);
d.insert(d.begin(),d2.begin(),d2.end());
printDeque(d);
}
void test03()
{
deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_front(100);
d.push_front(200);
//200 100 10 20
printDeque(d);
d.erase(d.begin());
//100 10 20
printDeque(d);
//删除指定项
deque<int>::iterator it=d.begin();
it++;
d.erase(it);
printDeque(d);
//清空
//d.clear();
d.erase(d.begin(),d.end());
printDeque(d);
}
int main()
{
//test01();
//test02();
test03();
}
6、数据存取
返回索引idx所指的数据
at(int idx)
返回索引idx所指的数据
operator[]
返回容器中第一个数据元素
front()
返回容器中最后一个数据元素
back()
代码如下
#include<iostream>
using namespace std;
#include<deque>
void printDeque(deque<int>&d)
{
for(deque<int>::iterator it=d.begin();it!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
//两端操作
void test01()
{
deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_front(100);
d.push_front(200);
printDeque(d);
for(int i=0;i<d.size();i++)
{
cout<<d[i]<<" ";
}
cout<<endl;
for(int i=0;i<d.size();i++)
{
cout<<d.at(i)<<" ";
}
cout<<endl;
cout<<"第一个元素为:"<<d.front()<<endl;
cout<<"最后一个元素为:"<<d.back()<<endl;
}
int main()
{
test01();
}
7、排序
对beg和end区间内元素进行排序
sort(iterator beg,iterator end)
代码如下
#include<iostream>
using namespace std;
#include<deque>
#include<algorithm>
void printDeque(deque<int>&d)
{
for(deque<int>::iterator it=d.begin();it!=d.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
//两端操作
void test01()
{
deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_front(100);
d.push_front(200);
printDeque(d);
cout<<"排序后:"<<endl;
sort(d.begin(),d.end());
printDeque(d);
}
int main()
{
test01();
}
默认sort都是升序排序,也可以添加函数改为降序排序