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. 참 조

 

 

copy - C++ Reference

123456789 template OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result) { while (first!=last) { *result = *first; ++result; ++first; } return result; }

www.cplusplus.com

 

 

 

copy_if - C++ Reference

function template std::copy_if template OutputIterator copy_if (InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred); Copy certain elements of range Copies the elements in the range [first,last) for which pred re

www.cplusplus.com

 

 

300x250