(C++) vector - accumulate, clear/erase, unique(+sort)

2022. 8. 18. 15:01STUDY/C++

반응형

# accumulate

HEADER : #include <numeric>

C++ 배열의 합을 구하는 함수이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <numeric>
#include <iostream>
using namespace std;
 
int main() {
    vector<int> v{1,2,3,4,5,6,7,8,9,10};
    int sum = accumulate(v.begin(), v.end() ,0);
    // accumulate( first iter, lase iter, initial val of sum );
 
    vector<int> v2 = { 10000000002000000000 }; // long long int
    long long sum = accumulate(v.begin(), v.end(), 0LL); 
 
    return 0;
}
cs

아래의 경우처럼 long long int 값을 더해줄때는, 

accumulate ( begin, end , 0LL )  맨 뒤의 합 초기값 까지 맞춰줘야한다. 실수 조심  !

 

# vector::clear()

All elements are destroyed one by one. So Time complextiy is O(N).

clear() is, All the elements of the vector are removed. 

 

# vector::erase()

erase() function is used to remove elements from a container from the specified position or range.

1. vector.erase(1)

2. vector.erase( begin_position, end_position )

Ex)

Input : myvector= {1, 2, 3, 4, 5},
iterator= myvector.begin()+2 (시작점+2번위치)
myvector.erase(iterator); (위에서 정의한 iterator삭제)
Output : 1, 2, 4, 5  ( 3번째 인 3 삭제됨 )

Input : myvector= {1, 2, 3, 4, 5, 6, 7, 8},
iterator1= myvector.begin()+3, ( 시작점+3 인 값인 4 )
iterator2= myvector.begin()+6  ( 시작점+6 인 값인 6 )
myvector.erase(iterator1, iterator2); ( 4 ~ 6 삭제)
Output : 1, 2, 3, 7, 8

 

# Unique ( + sort) 

HEADER : #include <algorithm>

Unique와 Sort 는 같은 헤더를 쓴다. 

아래의 소스는 다음과 같다.

먼저 기존 벡터 배열 출력 -> Sorting -> Unique / erase(Unique) 

Sorting 하고, Unique로 중복된 원소 뒤로 보낸다음, erase해줌으로써 중복된 원소 완전 삭제해준다.

물론 문자도 동일하게 사용가능하다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
vector<int> nums;
 
int main()
{
    nums = {1,2,1,3,1,2,1,3};
// nums = {a,b,c,b,a,d};
    cout << "Nums : ";
    for(int i = 0; i < nums.size(); i++cout << nums[i] << " ";
    cout << '\n';
    
    sort(nums.begin(), nums.end());
    cout << "After Sorting : ";
    for(int i = 0; i < nums.size(); i++cout << nums[i] << " ";
    cout << '\n';
 
    #if 0
    unique(nums.begin(), nums.end());
    cout << "Use unique : ";
    for(int i = 0; i < nums.size(); i++cout << nums[i] << " ";
    cout << '\n';
    #else
    nums.erase(unique(nums.begin(), nums.end()), nums.end());
    cout << "Use unique and erase overlap numbers : ";
    for(int i = 0; i < nums.size(); i++cout << nums[i] << " ";
    cout << '\n';
    #endif
}
//cs

 

# 결과 

 

 

 

 

 

 

 

728x90
반응형