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
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
 
int main() {
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    v.push_back(40);
    v.push_back(50);
 
    for (vector<int>::size_type i = 0; i < v.size(); ++i)
        cout << v[i] << " ";
    cout << endl;
 
    vector<int>::iterator iter;
    iter = adjacent_find(v.begin(), v.end()); //같은 숫자가 있는지 확인
    if (iter != v.end())
        cout << *iter << endl//없으면 끝 반환
 
    for (; iter != v.end(); ++iter)
        cout << *iter << " "//*iter 위치부터 끝까지 출력
    cout << endl;
    return 0;
}
cs

 

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
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool Pred(int a, int b) {
    return abs(b - a) > 10;
}
int main() {
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40); //60-40 시, 10보다 커지므로 40을 return 한다.
    v.push_back(60);
    v.push_back(80);
 
    for (vector<int>::size_type i = 0; i < v.size(); ++i)
        cout << v[i] << " ";
    cout << endl;
 
    vector<int>::iterator iter;
    iter = adjacent_find(v.begin(), v.end(), Pred); //같은 숫자가 있는지 확인
    if (iter != v.end())
        cout << *iter << endl//없으면 끝 반환
 
    for (; iter != v.end(); ++iter)
        cout << *iter << " "//*iter 위치부터 끝까지 출력
    cout << endl;
    return 0;
}
cs

 

 

n = count_if(v.begin(), v.end(), Pred) : 구간 [v.begin(), v.end())의 원소를 가리키는 반복자 p에 대해 단항 조건자 Pred(*p)가 참인 모든 원소의 개수를 반환합니다.

equal() 알고리즘 : 순차열을 비교합니다.

find() 알고리즘 : 

-find(v.begin(), v.end(), 20) : iter 구간 [v.begin(), v.end()) 에서 20값을 갖는 첫원소의 반복자 입니다.

-find_if(v.begin(), v.end(), pred) : iter는 구간 [v.begin(), v.end())에서 단항 조건자 Pred(*p)가 참인 첫 원소의 반복자 입니다.

find_end() 알고리즘 :

-find_end(v1.begin(), v1.end(), v2.begin(), v2.end()) : 구간 [v1.begin(), v1.end())의 순차열에 구간 [v2.begin(), v2.end())의 순차열이 일치하는지 판단하여 일치하는 순차열 구간이 여러 개라면 마지막 순차열의 첫 원소 반복자를 반환합니다.

-find_end(v1.begin(), v1.end(), v2.begin(), v2.end(), Pred) : [v2.begin(), v2.end())의 순차열이 [v1.begin(), v1.end())의 순차열의 원소보다 모두 크거나 같은(<=) 순차열 구간을 찾는다. 마지막 순차열은 원소가 10,11,12 인 순차열이므로 iter은 10을 가리키는 반복자가 됩니다.

find_first_of() 알고리즘 :

-find_first_of(v1.begin(), v1.end(), v2.begin(), v2.end()) : 편의상 범위를 v1 이라고 쓰고, v1 순차열에서 구간 v2의 원소 중 같은 원소가 발견되면 첫 원소의 반복자를 반환합니다. 

v1 : 10 20 30 40 50

v2 : 40 80 20 

iter : 20 

- 여기에 Pred ( 조건 ) 이 들어가게 되면 순차열 v1에서 v2의 순차열 원소 보다 큰 수가 처음으로 iter에 저장됩니다.

v1 : 10 20 30 40 50

v2 : 40 80 20

iter : 30 

for_each() 알고리즘 : 

for_each(v.begin(), v.end(), Print) : 구간 [v.begin(), v.end())의 모든 원소에 대해 Print(*p)를 적용합니다.

search() 알고리즘 :

search(v1.begin(), v1.end(), v2.begin(), v2.end()) : 구간 [v1.begin(), v1.end()) 의 순차열에 구간 [v2.begin(), v2.end())의 순차열이 일치하는지 판단하여 일치하는 순차열 구간이 여러개라면 첫번째 순차열의 첫 원소 반복자를 반환합니다.

* 원소를 수정하는 알고리즘 : 원소를 수정하는 알고리즘은 원소의 값을 변경하거나 목적지 순차열로 원소를 복사하는 알고리즘 입니다.

*제거 알고리즘 : 제거 알고리즘은 원소를 실제로 제거하지 않고 논리적으로 제거(다음 원소로 덮어쓰기)하기 때문에 순차열의 size를 실제로는 변경하지 않습니다. 

 

 

'C++ STL' 카테고리의 다른 글

C++STL11 :: map<key,value>  (0) 2020.09.23
C++ STL09 :: 연관 컨테이너  (0) 2018.12.30
C++ STL08 :: 시퀀스 컨테이너  (0) 2018.12.30
C++STL07 :: STL 소개(2)  (0) 2018.12.30