find 함수 : string과 vector는 다르다.

관련 문제

: 단어변환

시퀀스 컨테이너

  • 변수에 find를 통해 end() 값 비교를 통해 검색이 가능하다.

벡터의 경우

  • 변수에 find함수 사용 못하므로 iter를 통해 진행하자.

auto iter = find(v.begin(), v.end(), target);

iter != end()

이렇게

v.find() : 불가능하다!

  • 관련문제 : 카카오 2018 캐시

find를 통해 인덱스 접근

: auto iter = find(v.begin(), v.end(), target);
이후에 iter 와 v.begin()을 뺌으로서 인덱스 를 얻을 수 있다.
이때는 iter가 v.end()에 있을 수 있으므로 예외처리 해야한다.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;


int main(void) {

	vector<int> v{ 1,2,3,4 };

	auto iter = find(v.begin(), v.end(), 13);

	if (iter != v.end())
	{
		int index = distance(v.begin(), iter);
		cout << index << endl;
	}	
	else
	{
		cout << "컨테이너에 값이 없습니다." << endl;
	}

	iter = find(v.begin(), v.end(), 2);

	if (iter != v.end())
	{
		int index = distance(v.begin(), iter);
		cout << index << "번 인덱스에 값이 있습니다. "<< endl;
	}
	else
	{
		cout << "컨테이너에 값이 없습니다.";
	}


}

string에서의 find함수 사용

find 함수의 리턴값은 발견된 문자열의 시작 인덱스 값을 반환한다.
만약에 찾지 못했을 경우에는 string:npos를 반환한다.

예제

  • 문자열 존재할 경우

    : 문자열 12가 여러개 있지만, 맨 앞에 위치한 인덱스 3번을 출력했다.

  • 문자열 존재하지 않을 경우.

좋은 웹페이지 즐겨찾기