통사론:
주형 < 클래스 T > 무효의 교환 ( 티 & 변수_1 , 티 & 변수_2 ) ;값을 저장하는 첫 번째 변수와 두 번째 변수의 값이 모두 스왑됩니다. 이 함수는 변수의 값만 전환합니다. 출력이 없습니다.'
C++에서 swap() 함수 작업
스왑 함수는 다음 세 줄을 사용하여 C++로 구현됩니다.
주형 무효의 교환 ( 티 & 나 , 티 & 제이 ) {
온도 = 표준 :: 이동하다 ( 나 ) ;
나 = 표준 :: 이동하다 ( 제이 ) ;
제이 = 표준 :: 이동하다 ( 온도 ) ;
}
문 'T temp = std::move(i)'; 요소 'i'의 복사본을 만들고 복제합니다. 여기서 'i = std::move(j)'입니다. 'i'의 원본 항목을 버리고 원본 'j' 대신 'j'의 'i' 복사본을 저장합니다. 공식 'j = std:: move(temp)'; temp의 복제본으로 'i'를 저장하고 temp의 동일한 내용을 제거합니다. 또한 swap() 함수 실행이 완료된 후 임시 변수를 삭제합니다.
예제 1: std::move 메서드를 사용하여 스왑하는 프로그램
아래에 설명된 것처럼 C++11 기능 std::move를 사용하여 두 객체를 교환할 수 있습니다.
#include
#include <벡터>
주형
무효의 교환 ( 티 & ㅏ , 티 & 비 )
{
온도 = 표준 :: 이동하다 ( ㅏ ) ;
ㅏ = 표준 :: 이동하다 ( 비 ) ;
비 = 표준 :: 이동하다 ( 온도 ) ;
}
정수 기본 ( )
{
표준 :: 벡터 목록 = { 10 , 12 , 13 , 열 다섯 , 16 , 17 } ;
정수 나 = 삼 , 제이 = 5 ;
교환 ( 목록 [ 나 ] , 목록 [ 제이 ] ) ;
~을 위한 ( 정수 나 : 목록 ) {
표준 :: 쫓다 << 나 << ' ' ;
}
반품 0 ; }
객체 'T'가 있는 템플릿 선언이 있습니다. 그 후, 우리는 기능을 '스왑'으로 설정했습니다. 이 함수는 'T' 유형의 두 매개변수 &a 및 &b를 사용합니다. 인수 T& a, T& b는 전달된 변수의 주소를 참조하거나 저장하고 반환하지 않고 직접 적용한 결과로 swap(T& a, T& b) 함수를 참조 호출이라고 합니다.
void 스왑 내부에는 std::move 메서드를 사용하여 스와핑 알고리즘을 적용했습니다. 그런 다음, 우리는 프로그램 메인을 구성했습니다. 여기에서 변수 'list'를 선언하고 숫자 값 목록으로 초기화했습니다. 교환을 위해 'i'와 'j'에 대한 값을 설정했습니다. 두 번째 인덱스에 있는 숫자 값은 다섯 번째 인덱스에 있는 숫자 값으로 대체되었습니다. 그런 다음 스왑 함수를 호출하고 스왑을 위해 'i' 및 'j' 인덱스를 전달했습니다. for 루프는 교환된 목록을 인쇄하는 데 사용됩니다.
출력에 수정된 목록이 표시되었습니다. 지정된 인덱스에 따라 값을 교환하여 생성된 새 목록을 관찰할 수 있습니다.
예제 2: std::swap 메서드를 사용하여 스왑하는 프로그램
유틸리티 헤더(C++11)에 있는 std::swap 메커니즘을 사용하는 것이 일반적인 수정 사항입니다. 두 개체의 값이 전환되어 작동합니다.
#include#include <벡터>
#include <유틸리티>
정수 기본 ( )
{
표준 :: 벡터 = { 삼 , 6 , 9 , 열 다섯 , 13 } ;
정수 나 = 삼 , 제이 = 4 ;
표준 :: 교환 ( 아 [ 나 ] , 아 [ 제이 ] ) ;
~을 위한 ( 정수 나 : 아 ) {
표준 :: 쫓다 << 나 << ' ' ;
}
반품 0 ;
}
헤더 파일
std::swap 메서드를 사용하여 스와핑 작업 후 얻은 목록은 다음과 같이 표시됩니다.
예제 3: std::iter_swap 메서드를 사용하여 스왑하는 프로그램
알고리즘의 헤더에 나열된 std::iter_swap 알고리즘을 사용하는 것은 추가 옵션입니다. 작동 방식은 제공된 반복자가 가리키는 객체의 값을 전환하는 것입니다.
#include#include <벡터>
#include <반복자>
#include <알고리즘>
정수 기본 ( )
{
표준 :: 벡터벡 = { 64 , 61 , 62 , 63 , 60 } ;
정수 나 = 0 , 제이 = 4 ;
자동 itr1 = 표준 :: 다음 ( 일. 시작하다 ( ) , 나 ) ;
자동 itr2 = 표준 :: 다음 ( 일. 시작하다 ( ) , 제이 ) ;
표준 :: iter_swap ( itr1 , itr2 ) ;
~을 위한 ( 정수 나 : 물건 ) {
표준 :: 쫓다 << 나 << ' ' ;
}
반품 0 ;
}
프로그램의 메인 메소드에 벡터 변수 'vec'를 선언하고 숫자의 벡터 목록을 할당했습니다. 그런 다음 변수 'i'와 'j'에 인덱스 위치를 지정했습니다. iter1 및 iter2를 인수로 사용하는 std::iter_swap 메소드가 호출됩니다. iter1 및 iter2는 auto 키워드로 선언되고 반복 작업이 있습니다. for 루프 메서드는 실행 시 벡터 배열의 교환된 값을 인쇄합니다.
std::iter_swap 메서드가 지정된 벡터의 값을 성공적으로 교환했습니다.
예제 4: 스왑할 임시 변수 없이 사용하는 프로그램
이 예제는 임시 변수를 사용하지 않고 C++ 코드에서 숫자를 교환하는 새로운 방법을 보여줍니다.
#include네임스페이스 표준 사용 ;
정수 기본 ( )
{
정수 x1 = 둘 , x2 = 12 ;
쫓다 << '바꾸기 전에.' << 끝 ;
쫓다 << 'x1 = ' << x1 << ', x2 = ' << x2 << 끝 ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
쫓다 << ' \N 교환 후.' << 끝 ;
쫓다 << 'x1 = ' << x1 << ', x2 = ' << x2 << 끝 ;
반품 0 ; }
이 프로그램의 동작을 살펴보자. 여기서는 초기에 각각 숫자로 설정된 x1과 x2를 선언했습니다. 그런 다음 공식 x1 = x1+ x2를 사용하여 x1과 x2를 더하고 결과를 x1에 넣습니다. 이것은 x1이 2 더하기 12와 같다는 것을 나타냅니다. 따라서 이제 14와 같습니다. 그런 다음 공식 x2 = x1 – x2를 적용합니다. 이것은 x2 = 14 – 12임을 나타냅니다. 따라서 x2는 이제 2와 같습니다. 다시 한 번 공식 x1 = x1 – x2를 적용합니다. 이것은 x1 = 14 – 2임을 나타냅니다. 따라서 x1 = 12입니다. 결과적으로 번호가 변경되었습니다.
다음 프롬프트 화면에 이전과 이후에 교환된 번호가 표시됩니다.
결론
여기에서는 C++의 swap()에 대한 전체 설명, 사용법 및 작동 방식을 보여주는 몇 가지 예를 살펴보겠습니다. std:: swap() 함수를 사용하여 두 변수의 값을 전환할 수 있습니다. C++ STL에는 std::swap()이라는 내장 함수가 포함되어 있습니다. 이 튜토리얼에서는 swap(T& 변수 1, T& 변수 2) 함수를 참조로 호출하고 C++에서 데이터 변수의 유형에 따라 swap()을 오버로드하는 방법도 설명합니다.