C++프로그래밍/자료구조,알고리즘(추후확장)

자주 쓰이는 알고리즘

season97 2024. 10. 1. 12:51

※ 개인적인 공부를 위해 포스팅 하는 글입니다.


   find
   find_if
   count
   count_if
   all_of
   any_of
   none_of
   for_each
   remove
   remove_if

 

# vector로 확인해 보자

   srand(static_cast<unsigned int>(time(nullptr)));
   vector<int> v;
   for (int i = 0; i < 100; i++)
   {
       int num = rand() % 100;
       v.push_back(num);
   }

 

 

01. number숫자가 있으면 found 트루

 

#find

  auto itFind = find(v.begin(), v.end(),number);

 

ㆍ 직관적이고 간단하다. 시작~끝 넘버있는지, 반환타입은 이터레이터를 반환해주는 모습

  if (itFind == v.end())
  {
      cout << "못찾" << endl;
  }
  else
  {
      cout << "찾" << endl;
  }

 

 

 

02. 11로 나뉘는 숫자가 벡터에 있는지?

 

# find_if

  struct CanDivideBy11
  {
      bool operator()(int n)
      {
          return (n % 11) == 0;
      }
  };
  std::find_if(v.begin(), v.end(), CanDivideBy11()/*람다*/);
  std::find_if(v.begin(), v.end(), [](int n) { return (n % 11) == 0; });

ㆍ 함수객체를 활용하거나, 람다식을 활용해주면 되겠다. 직관적이다

ㆍ 시작,끝,찾을 조건

 

 03. 홀수인 숫자의 갯수는? 

 

#count_if , all_of, any_of, none_of

count_if(v.begin(), v.end(), [](int n) {return (n % 2) != 0; });
bool b1 =  all_of(v.begin(), v.end(), [](int n) {return (n % 2) != 0; });  
bool b2 = any_of(v.begin(), v.end(), [](int n) {return (n % 2) != 0; });  
bool b3 = none_of(v.begin(), v.end(), [](int n) {return (n % 2) != 0; });

ㆍ b1 : 모든 데이터가 홀수입니까?
ㆍ b2 : 홀수인 데이터가 1개라도 있습니까?
ㆍ b3 :모든 데이터가 홀수가 아닙니까?

 

 

04. 벡터에 들어가 있는 모든 데이터에 3을 곱해주세요

for_each(v.begin(), v.end(), [](int& n) { n = n * 3; });

 

ㆍ 시작위치, 끝위치, 작동할 함수

 

 

 

05. 홀수인 데이터를 일괄 삭제

remove_if(v.begin(), v.end(), [](int n) {return (n % 2) != 0; });

ㆍ 얘가 좀 특이하다. 작동방식을 확인해 봤다...

ㆍ 남겨줘야 하는 데이터를 체크해서 복사를 한다. 홀수를 지우고 짝수를 남겨야한다.
ㆍ 아래 1 부분의 이터레이터를 반환한다. 

ㆍ 삭제를 한 것이 아니라, 삭제할 데이터들의 묶음의 첫번째 이터레이터를 반환해 주는 알고리즘이다.
ㆍ 따라서 erase를 따로 해줘야한다.

 vector<int>::iterator it = std::remove_if(v.begin(), v.end(), [](int n) {return (n % 2) != 0; });
 v.erase(it);

'C++프로그래밍 > 자료구조,알고리즘(추후확장)' 카테고리의 다른 글

연관 컨테이너  (1) 2024.10.01
map  (3) 2024.09.30
deque  (0) 2024.09.30
list 구현해보기  (1) 2024.09.29
list와 list의 이터레이터  (0) 2024.09.29