STL 시리즈 ----- 양단 큐 컨테이너 정보

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都是升序排序,也可以添加函数改为降序排序

发布了37 篇原创文章 · 获赞 3 · 访问量 1165

추천

출처blog.csdn.net/qq_45721778/article/details/105314843