Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL deque::at()과 deque::swap() 함수 완벽 정리

이 글에서는 C++ STL의 deque::at() 함수와 deque::swap() 함수의 문법, 동작 방식, 그리고 반환값에 대해 자세히 알아보겠습니다.

STL에서 deque::at()과 deque::swap()이란?

덱(Deque, Double Ended Queue)은 이름 그대로 양쪽 끝에서 확장하거나 축소할 수 있는 시퀀스 컨테이너입니다. 사용자는 앞쪽과 뒤쪽 어느 쪽 끝에서든 손쉽게 데이터를 삽입하거나 삭제할 수 있습니다.

덱은 벡터(vector)와 유사하지만, 벡터와 달리 연속적인 메모리 할당이 보장되지 않는다는 점이 다릅니다. 그럼에도 불구하고 덱은 양쪽 끝에서 요소를 삽입하고 삭제하는 작업에서는 벡터보다 훨씬 효율적입니다.


deque::at() 함수

at() 함수는 함수의 매개변수로 전달된 특정 위치에 있는 요소에 대한 참조(reference)를 반환하는 데 사용됩니다.

문법

dequename.at(요소의 위치)

매개변수

참조를 얻고자 하는 요소의 위치(인덱스)를 전달합니다.

반환값

지정된 위치에 있는 요소에 대한 직접 참조를 반환합니다.

예제

Input : adeque = 1, 3, 4, 5, 8
adeque.at(3);
Output : 5

Input : adeque = 1, 3, 5, 7, 9
adeque.at(2);
Output : 5

실제 코드 예시

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

int main(){
    deque<int> adeque;
    adeque.push_back(1);
    adeque.push_back(3);
    adeque.push_back(4);
    adeque.push_back(5);
    adeque.push_back(8);
    
    cout << adeque.at(3);
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

5

인덱스는 0부터 시작하므로 at(3)은 네 번째 요소인 5를 반환합니다.


deque::swap() 함수

swap() 함수는 동일한 타입을 가진 두 개의 덱 사이에서 요소들을 서로 교환하는 데 사용됩니다.

문법

deque1.swap(deque2)

매개변수

교환 대상이 되는 다른 덱의 이름을 매개변수로 전달합니다.

반환값

함수는 값을 반환하지 않지만, 두 덱의 모든 요소가 서로 교환됩니다.

예제

Input : adeque = {1, 3, 4, 5, 8}
bdeque = {2, 6, 7, 9, 0}
adeque.swap(bdeque);
Output : adeque = {2, 6, 7, 9, 0}
bdeque = {1, 3, 4, 5, 8}

실제 코드 예시

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

int main(){
    // 덱 컨테이너 선언
    deque<int> adeque{ 1, 2, 3, 4 };
    deque<int> bdeque{ 3, 5, 7, 9 };
    
    // swap() 함수로 두 덱의 요소 교환
    adeque.swap(bdeque);
    
    // adeque의 요소 출력
    cout << "adeque = ";
    for (auto it = adeque.begin(); it < adeque.end(); ++it)
        cout << *it << " ";
    
    // bdeque의 요소 출력
    cout << endl << "bdeque = ";
    for (auto it = bdeque.begin(); it < bdeque.end(); ++it)
        cout << *it << " ";
    
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

adeque = 3 5 7 9
bdeque = 1 2 3 4

결과에서 확인할 수 있듯이, swap() 함수 호출 후 두 덱의 내용이 완전히 서로 바뀌었습니다. 이처럼 swap()은 요소를 하나씩 복사하는 것이 아니라 내부 포인터만 교환하기 때문에 매우 빠르게 동작합니다.