C++STL10 :: adjacent_find()
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 |
댓글
이 글 공유하기
다른 글
-
C++STL11 :: map<key,value>
C++STL11 :: map<key,value>
2020.09.23 -
C++ STL09 :: 연관 컨테이너
C++ STL09 :: 연관 컨테이너
2018.12.30 -
C++ STL08 :: 시퀀스 컨테이너
C++ STL08 :: 시퀀스 컨테이너
2018.12.30 -
C++STL07 :: STL 소개(2)
C++STL07 :: STL 소개(2)
2018.12.30