이 글에서는 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()은 요소를 하나씩 복사하는 것이 아니라 내부 포인터만 교환하기 때문에 매우 빠르게 동작합니다.