C++ 표준 스왑

C Pyojun Seuwab

“스와핑은 둘 이상의 물건을 교환하는 행위입니다. 프로그래밍에서 두 변수 사이의 데이터를 전환할 수 있습니다. 두 사람 사이의 물건 교환은 실생활에서 가능합니다. C++의 표준 라이브러리 함수인 swap()을 사용하여 두 객체의 값을 바꿀 수 있습니다. C11의 '유틸리티' 헤더 아래에 배치되었습니다. C++의 swap() 함수는 각 요소를 개별적으로 교환해야 하기 때문에 배열에 대해 N의 복잡도를 갖는 반면 상수에 대한 함수의 난이도는 일정합니다. swap() 함수는 변수 요소 중 하나라도 실패하면 경고 또는 오류를 발생시킵니다. 아래에서 std::swap()에 대한 함수의 서명을 살펴보십시오.

통사론:

주형 < 클래스 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 ;
}

헤더 파일 를 가져옴으로써 프로그램의 스왑 기능에 액세스할 수 있습니다. 여기에 두 개의 더 중요한 라이브러리와 함께 헤더 파일 를 포함했습니다. 그런 다음 int main 메소드를 설정했습니다. 프로그램의 메인 내에서 'arr' 변수를 생성하여 벡터를 선언했습니다. 변수 'arr'은 정수의 5개 요소로 초기화됩니다. 인덱스 위치는 스와핑을 위해 'i'와 'j'에 할당됩니다. 변수 'i'와 'j'는 지정된 인덱스 값의 스왑을 위해 std::swap 메서드에 전달됩니다. for 루프를 사용하여 교환된 배열을 인쇄했습니다.

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()을 오버로드하는 방법도 설명합니다.