클래스 : 데이타 타입
string : char*
백터 : 배열
->차이점? 미리 만들어진 함수등을 사용 할 수 있어서
쉽게 접근및 연산이 가능하다.
알고리즘은 방법일뿐 자료는 컨테이너에 있다, 이에 접근하기 위해서 반복자를 사용
불변경 알고리즘
변경 알고리즘이 존재한다.
알고리즘의 종류
접근하기 위한 반복자
.end() 는 마지막의 다음 주소를 가진다. NULL 과 같은,,
랜덤 접근이 가능한 반복자.
#include<iostream>
#include<vector>
using namespace std;
void main(){
vector<int> vec;
for(int i=0; i<10; i++)
vec.push_back(i);
vector<int>::iterator it;
it = vec.begin();
cout<< it[2]<<endl;
cout<< *(it+2)<<endl;
it = it+5;
it--;
cout<<*it <<endl;
}
find() 알고리즘을 이용한 예제
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
void main(){
/*
vector<int> vec;
for(int i=0; i<10; i++)
vec.push_back(i);
vector<int>::iterator it;
it = vec.begin();
cout<< it[2]<<endl;
cout<< *(it+2)<<endl;
it = it+5;
it--;
cout<<*it <<endl;
*/
// find( 알고리즘을이용한예제다)
string fruits[5] = {"사과" ,"딸기","토마토","포도","배"};
vector<string> vec( &fruits[0], &fruits[5] ); // 배열을백터에통으로넣어준다.
vector<string> ::iterator it;
it = find( vec.begin(), vec.end(), "배");
if( it != vec.end() )
cout<<"배가" << distance(vec.begin(), it) <<"에있습니다."<<endl;
}
find_if 함수
함수의 이름을 전달한다.
함수의 이름은 함수의시작 주소이다.
함수는 반드시 bool 타입이며,
매개 변수는 반드시 STL의 타입에 맞게 한다. 백터 스트링 = 함수 (스트링)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool checkKim(string s){
if(s.find("김") != string::npos)
return true;
else
return false;
}
void main(){
string name[5] = {"김철수","김갑수","강감찬","안철수","김동현"};
vector<string> vec(&name[0], &name[5]);
vector<string>::iterator it;
it = vec.begin();
while(true){
it = find_if(it, vec.end(), checkKim);
if(it ==vec.end())
break;
cout<<"위치" << distance(vec.begin(), it) <<"에서"<<*it <<"를탐색하였음"<<endl;
it++;
}
}