C++ vector 범위 초기화 Copy
Notepad96
·2020. 11. 14. 13:51
300x250
1. copy
copy 함수는 algorithm 라이브러리의 포함되어 있는 함수이다.
copy는 반복자를 인자로 받으며 지정된 범위의 값을 복사할 수 있다.
예를 들어 vector에서 인덱스 2번 부터 6번까지의 값들을 다른 벡터의 존재하는 일련의 값들로 초기화 하고 싶을 경우에도 이 copy 함수를 사용할 수 있다.
물론 이러한 작업은 for문을 사용하여도 충분히 가능하다.
2. 코 드
환경 : Visual studio 2019
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v = { 10, 20, 30, 40, 50 };
for (int i : v) cout << i << " ";
cout << "\n=============================\n";
// vector<int> v2; // error 발생
vector<int> v2(10,0);
copy(v.begin(), v.end(), v2.begin()+5);
//copy_n(v.begin(), 5, v2.begin() + 5);
copy_if(v.begin(), v.end(), v2.begin(), [](int i) {return i > 30; });
// v2.assign(v.begin(),v.end()); // 10 20 30 40 50 새로 초기화
for (int i : v2) cout << i << " ";
cout << "\n=============================\n";
v2.insert(v2.end(), v.begin(), v.end());
for (int i : v2) cout << i << " ";
cout << "\n=============================\n";
return 0;
}
- copy의 경우 삽입이 아니라 값을 다시 초기화하는 것이므로
vector v2; 처럼 공간을 할당하지 않고서 copy를 사용하면 에러가 발생한다.
- copy ( 시작 반복자, 종료 반복자, 초기화 시작할 반복자) 를 인자로 가지며
시작 반복자 ~ 종료 반복자 사이의 개수만큼 시작할 반복자에서 시작하여 값들이 초기화된다.
- copy_n 은 copy와 다르게 2번 째 인자로 개수를 받는다.
- copy_if의 경우 추가적으로 조건 함수 인자를 받아 해당 조건의 해당하는 값들만 추가되도록 한다.
※ copy vs. assign vs. insert
- copy : copy는 삽입이 아니므로 이미 공간이 할당되어 있어야 사용할 수 있다.
따라서 원소의 추가 없이(개수 변화X) 일정 범위의 값들을 다시 초기화하고 싶을 경우 사용할 수 있다.
- assign : vector를 초기화 후 값을 삽입하는 것으로 vector를 새로 생성 후 삽입하는 것처럼 하고자하면 사용할 수 있다.
- insert : 추가적인 원소가 필요한 경우 반복자를 이용하여 특정 위치에 삽입할 수 있다.
3. 참 조
300x250
'C++ > STL' 카테고리의 다른 글
C++ 문자열 소문자, 대문자 변환 transform (0) | 2020.11.15 |
---|---|
C++ 값 교환하기 Swap (0) | 2020.11.14 |
C++ 동일 원소 포함 여부 확인 is_permutation (0) | 2020.11.14 |
C++ 일련하는 원소 찾기 Search (0) | 2020.11.13 |
C++ 원소 개수 구하기 Count (0) | 2020.11.13 |