C++ 표준 템플릿 라이브러리 STL 순서 컨테이너 상세 정보

C++ 표준 템플릿 라이브러리 STL 순서 컨테이너


용기
데이터 구조
순서성
반복성
지원 교체기
vector
동적 배열
무질서하다
반복 가능
랜덤 액세스 교체기
deque
양방향 대기열
무질서하다
반복 가능
랜덤 액세스 교체기
list
양방향 체인 테이블
무질서하다
반복 가능
양방향 교체기

동적 배열vector


ctor#include <vector> 동적 수조: 그 원소는 메모리에 연속적으로 저장되어 있으며, 임의로 어떤 원소를 저장해도 상수 시간 내에 완성할 수 있으며, 이 용기의 끝부분에서 원소를 삭제하면 거의 상수 시간 내에 완성할 수 있어 비교적 좋은 성능을 가진다.
vector 공통 함수 사용 인스턴스는 다음과 같습니다.

#include <iostream>
#include <vector>
using namespace std;
template<class T>
void printVector(T s, T e){
    for(;s != e; ++s){
        cout << *s << ' ';
    }
    cout << endl;
}

int main(){
    int a[5] = {1,2,3,4,5};
    vector<int> v(a,a+5);
    cout << "1)" << v.end() - v.begin() << endl;
    cout << "2)";
    printVector(v.begin(), v.end());
    v.insert(v.begin()+3, 100); // insert() 
    cout << "3)";
    printVector(v.begin(), v.end());

    vector<int> v2(5,0);
    v2.insert(v2.begin()+2,v.begin(),v.end()); // insert()    
    cout << "4)";
    printVector(v2.begin(), v2.end());   
    v.erase(v.begin()+3); // erase()   
    cout << "5)";
    printVector(v.begin(), v.end());
    v.erase(v.begin()+2,v.begin()+4); // erase()  
    cout << "6)";
    printVector(v.begin(), v.end());
 
    return 0;
}
구조 함수
함수
함수 설명
vector
구조 함수 크기를 설정할 수 있는vector 만들기
vector(const vector&)
복사 구조 함수, 구간 내 다른 수조의 요소를 복사할 수 있다
operator=
컨테이너에 새 컨텐트를 할당하여 현재 컨텐트를 교체하고 크기를 변경합니다.
assign
새 내용을vector에 분배하여 현재 내용을 바꾸고 크기를 수정합니다
용량 관리 함수
함수
함수 설명
size
컨테이너의 요소 수 되돌리기
max_size
용기에 수용할 수 있는 최대 원소 수를 되돌려줍니다.
resize
용기의 크기를 조정하여 n(매개 변수)개의 요소를 포함하도록 합니다
capacity
현재 vector에 할당된 저장 공간 (용량) 의 크기를 되돌려줍니다.
empty
vector가 비어 있는지 되돌려줍니다.
reserve
요청vector 용량은 최소한 n (매개 변수) 개의 요소를 포함할 수 있습니다
shrink_to_fit
용기에size(원소 수량)에 적응하기 위해capacity(용량)를 줄여야 합니다
첨삭 함수
함수
함수 설명
push_back
용기의 마지막 요소 다음에 새 요소 추가
pop_back
용기의 마지막 요소를 삭제하여 용기size를 효과적으로 감소합니다
insert
지정된 위치의 요소 앞에 새 요소를 삽입하여 컨테이너를 확장하고 요소 수를 삽입하여 컨테이너 크기를 효과적으로 증가시킵니다.
erase
vector에서 단일 원소(position나 일련의 원소([first,last)를 삭제하면 제거된 원소의 수를 효과적으로 줄이고 용기의 크기를 파괴합니다
clear
vector에서 모든 요소를 삭제하고 크기가 0인 용기를 남깁니다
emplace
position (파라미터) 위치에 새 요소args (파라미터) 를 삽입하여 용기를 확장합니다
emplace_back
vector의 끝에 새로운 요소를 삽입합니다. 현재 마지막 요소의 뒤를 따릅니다.
색인 함수
함수
함수 설명
operator[]
용기의 n (매개 변수) 개 위치의 요소에 대한 인용을 되돌려줍니다.
at
용기의 n (매개 변수) 개 위치의 요소에 대한 인용을 되돌려줍니다.
front
용기의 첫 번째 요소에 대한 인용을 되돌려줍니다.
back
용기의 마지막 요소에 대한 인용을 되돌려줍니다.
data
용기의 첫 번째 요소를 가리키는 바늘을 되돌려줍니다.
반복기 함수
함수
함수 설명
begin
용기의 첫 번째 원소를 가리키는 교체기를 되돌려줍니다.
end
용기의 마지막 원소를 가리키는 이론적 원소의 교체기
rbegin
용기의 마지막 원소를 가리키는 역방향 교체기를 되돌려줍니다.
rend
역방향 교체기를 되돌려주고 중의 첫 번째 원소를 가리키기 전의 이론 원소를 가리킨다
cbegin
용기의 첫 번째 요소를 가리키는 상수 교체기 (const_iterator) 를 되돌려줍니다.
cend
용기의 마지막 원소를 가리키는 이론적 원소의 상수 교체기를 되돌려줍니다(const_iterator)
crbegin
컨테이너의 마지막 요소를 가리키는 상수 역변환기(const_reverse_iterator) 반환
crend
용기의 첫 번째 요소를 가리키기 전의 이론적 요소를 되돌려주는 상수 역변환기(const_reverse_iterator)
vector로 2차원 그룹을 실현하다

#include <iostream>
#include <vector>
using namespace std;

int main(){
    vector<vector<int>> arr(3); // arr  3  ,  vector<int>  
    for(int i=0; i<arr.size(); ++i){
        for(int j=0; j<3; ++j){
            arr[i].push_back(j);
        }
    }
    for(int i=0; i<arr.size(); ++i){
        for(int j=0; j<3; ++j){
            cout << arr[i][j] << ' ';
        }
        cout << endl;
    }
    return 0;
}

양방향 대기열 deque


que#include <deque> 양방향 대기열: 그 요소는 메모리에 연속적으로 저장되어 있으며, 임의로 모든 요소를 저장하면 상수 시간 내에 완성할 수 있으며, 이 용기의 양쪽 첨삭 요소도 거의 상수 시간 내에 완성할 수 있어 비교적 좋은 성능을 가진다.
vector에 적용되는 모든 작업은 deque에 적용됩니다. 이외에 deque는 push_front / pop_front 맨 앞에 요소를 삽입하거나 삭제하는 작업도 있습니다. 복잡한 것은 O(1) O(1) O(1)입니다.
함수
함수 설명
deque
구조 함수
push_back
용기의 끝에 새로운 요소를 추가하다
push_front
컨테이너 시작 부분에 새 요소 삽입
pop_back
용기의 마지막 요소를 삭제하고 용기 크기를 하나 줄인다
pop_front
용기의 첫 번째 요소를 삭제하고 용기 크기를 하나 줄인다
emplace_front
용기의 시작 부분에 새로운 요소를 삽입합니다
emplace_back
용기의 끝에 새로운 요소를 삽입하다

양방향 체인 시계list


list#include <list> 쌍방향 체인표: 그 요소는 메모리에 연속적으로 저장되지 않고 무작위 접근을 지원하지 않으며 이 용기의 어느 위치에서든 요소를 삭제하면 상수 시간 내에 비교적 좋은 성능을 완성할 수 있다.
list는 모든 순서 용기에 있는 구성원 함수를 제외하고 다음 8개의 구성원 함수를 지원합니다.
함수
함수 설명
push_front
컨테이너 시작 부분에 새 요소 삽입
pop_front
컨테이너에서 첫 번째 요소 삭제
sort
요소 정렬, 주의해야 할 것은list가 STL 알고리즘의sort를 지원하지 않는다는 것이다
remove
값이 같은 모든 요소 삭제
unique
이전 원소와 같은 원소를 모두 삭제하여 원소가 중복되지 않도록 합니다. 사용하기 전에sort가 필요합니다.
merge
두 개의 체인 시계를 합쳐서 합쳐진 체인 시계를 비우다
reverse
체인 테이블 컨텐트 뒤집기
splice
지정한 위치 앞에 다른 체인 테이블에 하나 이상의 요소를 삽입하고 이 체인 테이블에서 삭제합니다.
list의 구성원 함수 사용 사례는 다음과 같습니다.

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;

class A{
    private:
        int n;
    public:
        A(int n_){n = n_;}
        friend bool operator<(const A & a1, const A & a2);
        friend bool operator==(const A & a1, const A & a2);
        friend ostream& operator<<(ostream & o, const A & a2);
};

bool operator<(const A & a1, const A & a2){
    return a1.n < a2.n;
}

bool operator==(const A & a1, const A & a2){
    return a1.n == a2.n;
}

ostream& operator<<(ostream & o, const A & a2){
    o << a2.n;
    return o;
}

template <class T>
void printList(T start, T end){
    for(;start != end; ++start){
        cout << *start << ',';
    }
    cout << endl;
}

int main(){
    list<A> lst1, lst2;
    lst1.push_back(1); lst1.push_back(3);
    lst1.push_back(2); lst1.push_back(4);
    lst1.push_back(2);
    lst2.push_back(10); lst2.push_back(50);
    lst2.push_back(30); lst2.push_back(30);  
    lst2.push_back(40); lst2.push_back(40); 
    lst2.push_back(30); lst2.push_back(20);
    cout << "1) ";
    printList(lst1.begin(),lst1.end());
    cout << "2) ";
    printList(lst2.begin(),lst2.end());
    lst2.sort(); //   sort   lst2  
    cout << "3) ";
    printList(lst2.begin(),lst2.end());
    lst2.unique(); //   lst2  
    cout << "4) ";
    printList(lst2.begin(),lst2.end());
    lst2.pop_front(); //   lst2  
    cout << "5) ";
    printList(lst2.begin(),lst2.end());
    lst1.remove(2); //   lst1   2  
    cout << "6) ";
    printList(lst1.begin(),lst1.end());
    lst2.merge(lst1); //   lst1   lst2   lst1  
    cout << "7) ";
    printList(lst2.begin(),lst2.end());
    lst2.reverse(); //   lst2
    cout << "8) ";
    printList(lst2.begin(),lst2.end());
    
    lst1.push_back(100); lst1.push_back(200); 
    lst1.push_back(300); lst1.push_back(400);
    cout<<"9) ";
    printList(lst1.begin(),lst1.end());
    //  
    list<A>::iterator p1,p2,p3;
    p1 = find(lst2.begin(),lst2.end(),4);
    p2 = find(lst1.begin(),lst1.end(),200);
    p3 = find(lst1.begin(),lst1.end(),400);
    lst2.splice(p1,lst1,p2,p3); //   lst1   [p2,p3)   lst2   p1  ,  lst1  
    cout<<"10) ";
    printList(lst1.begin(),lst1.end());
    cout<<"11) ";
    printList(lst2.begin(),lst2.end());
    
    return 0;
}
이 글은 C++ 표준 템플릿 라이브러리 STL 순서 용기에 대한 자세한 내용을 소개합니다. 더 많은 C++ 표준 템플릿 라이브러리 STL 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기