C++ - Algorithm 헤더 파일 - swap(), swap_ranges(), copy(), fill()

2020. 4. 13. 16:49·Language/C++

이 글 중 4개 중 3개가 배열 관련 함수입니다~ 당연히 벡터 등 다른 리스트 클래스에도 작동됩니다.

 

[swap() : 매개변수 2개의 값을 바꾸는 것]

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

int main(){

	int a = 3, b = 5;
	cout << "a: " << a << ", b: " << b << endl;
	swap(a, b);
	cout << "a: " << a << ", b: " << b << endl;

	return 0;
}
a: 3, b: 5
a: 5, b: 3

그럼 swap_ranges() 함수를 봅시다. 말 그대로 구간 전체를 바꾸는 겁니다.

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

int main(){

	int a[5] = {1, 2, 3, 4, 5};
	int b[5] = {6, 7, 8, 9, 10};
	swap_ranges(a, a+3, b);

	cout << "a:";
	for(int i=0; i<5; i++) cout << ' ' << a[i];
	cout << endl << "b:";
	for(int i=0; i<5; i++) cout << ' ' << b[i];
	cout << endl;

	return 0;
}

매개변수는 3개입니다. 바꿀 구간 위치 중 첫 번째 구간의 시작점, 첫 번째 구간의 끝점, 두 번째 구간의 시작점 이렇게입니다. 

사실, 첫 번째 구간의 시작과 끝을 알면 이미 크기가 정해지므로 두 번째 구간의 끝점은 써 줄 필요가 없습니다. 앞으로 모든 구간 형태 함수는 끝점은 포함되지 않습니다.

 

[copy() :복사하는 함수]

 

물론, 값 하나야 대입 연산자 쓰면 끝나니까 필요없을 것이고, 범위 안의 값을 모두 복사합니다. swap_ranges() 함수와 사용법이 비슷합니다. 단, 맞바꾸지 않고 복붙합니다.  복사를 할 대상의 시작점, 끝점, 복사할 위치의 시작점 이렇게 3개 

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

int main(){

	int a[5] = {1, 2, 3, 4, 5};
	int b[5] = {6, 7, 8, 9, 10};
	copy(a+1, a+4, b+1);

	cout << "a:";
	for(int i=0; i<5; i++) cout << ' ' << a[i];
	cout << endl << "b:";
	for(int i=0; i<5; i++) cout << ' ' << b[i];
	cout << endl;

	return 0;
}

이번엔 a[1]~a[3] 값을 복사해서 b[1]~b[3]에 넣습니다.

a: 1 2 3 4 5
b: 6 2 3 4 10

단, 이런 함수에 배열명 + 상수값 등을 해서 주소를 참조하게 되면 경고가 뜹니다. 그도 그럴 것이, 저기에 "b+1000" 같은 것을 써서 참조해서는 안 되는 곳을 참조할지도 모르기 때문인데, 때문에 코드 작성자가 제대로 작성하는 것을 염두에 둬야 합니다.

 

[fill() :지정된 범위를 동일한 값으로 모두 채우는 함수]

 

사용법은 범위의 시작점, 끝점, 채울 값 3개입니다. 채울 값은 해당하는 자료형의 값을 써 주면 됩니다.

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

int main(){

	int a[5] = {1, 2, 3, 4, 5};
	int b[5] = {6, 7, 8, 9, 10};
	fill(a+2, a+5, 0);
	fill(b, b+4, 3);

	cout << "a:";
	for(int i=0; i<5; i++) cout << ' ' << a[i];
	cout << endl << "b:";
	for(int i=0; i<5; i++) cout << ' ' << b[i];
	cout << endl;

	return 0;
}
a: 1 2 0 0 0
b: 3 3 3 3 10

 

출처: https://m.blog.naver.com/PostList.nhn?blogId=kks227&categoryNo=163&logCode=0

'Language > C++' 카테고리의 다른 글

C++ - Algorithm 헤더 파일 replace(), replace_if(), remove(), remove_if()  (0) 2020.04.13
C++ - Algorithm 헤더 파일 reverse(), rotate(), random_shuffle()  (0) 2020.04.13
C++ - vector 초기화  (0) 2020.04.13
C++ - 형변환  (0) 2020.04.05
C++ - 입출력 효율성 증가시키는 방법  (0) 2020.03.30
'Language/C++' 카테고리의 다른 글
  • C++ - Algorithm 헤더 파일 replace(), replace_if(), remove(), remove_if()
  • C++ - Algorithm 헤더 파일 reverse(), rotate(), random_shuffle()
  • C++ - vector 초기화
  • C++ - 형변환
dev.wookii
dev.wookii
Effort Maketh Happiness
  • dev.wookii
    습관처럼
    dev.wookii
  • 전체
    오늘
    어제
    • 분류 전체보기 (295)
      • Language (35)
        • python (13)
        • C++ (22)
      • Kaggle (4)
      • Algorithms (112)
        • BOJ (58)
        • programmers (43)
        • SWExpertAcademy (2)
      • Certification (38)
        • Adsp (0)
        • Sqld (28)
        • 정처기 (9)
        • 빅데이터 분석기사 (0)
      • Data Analysis & ML (6)
      • 금융 & 디지털 (65)
      • CS (32)
        • DB (2)
        • SE (3)
        • Web&JSP (1)
        • Network (11)
        • OS (2)
        • Linux&Unix (6)
        • Server (1)
        • UX,UI (1)
        • 보안 (5)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시뮬레이션
    funny algorithms
    programmers
    2020 KAKAO
    Ebay korea #coding test
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev.wookii
C++ - Algorithm 헤더 파일 - swap(), swap_ranges(), copy(), fill()
상단으로

티스토리툴바