NON_MUTATING_ALGORITHMS(3)

πŸ“¦ version 4.4.0, in nixpkgs unstable

🌈 Non-Mutating Algorithms(3) 🌈

okay bestie, this is the Library Functions Manual page for Non-Mutating Algorithms, part 1 of 3. It's giving very "read the docs but make it cute" energy, and we are keeping every single detail. No cap. πŸ’…


πŸŽ€ NAME πŸŽ€

Non-Mutating Algorithms - these are the non-mutating algorithm goodies, and the function lineup is literally:

🧚 Functions 🧚

   template<typename _ForwardIterator , typename _BinaryPredicate >
       _ForwardIterator std::adjacent_find (_ForwardIterator __first,
       _ForwardIterator __last, _BinaryPredicate __binary_pred)
   template<typename _ForwardIterator > _ForwardIterator std::adjacent_find
       (_ForwardIterator __first, _ForwardIterator __last)
   template<typename _InputIterator , typename _Predicate > bool
       std::all_of (_InputIterator __first, _InputIterator __last,
       _Predicate __pred)
   template<typename _InputIterator , typename _Predicate > bool
       std::any_of (_InputIterator __first, _InputIterator __last,
       _Predicate __pred)
   template<typename _InputIterator , typename _Tp > iterator_traits<
       _InputIterator >::difference_type std::count (_InputIterator
       __first, _InputIterator __last, const _Tp &__value)
   template<typename _InputIterator , typename _Predicate >
       iterator_traits< _InputIterator >::difference_type std::count_if
       (_InputIterator __first, _InputIterator __last, _Predicate __pred)
   template<typename _IIter1 , typename _IIter2 , typename _BinaryPredicate
       > bool std::equal (_IIter1 __first1, _IIter1 __last1, _IIter2
       __first2, _BinaryPredicate __binary_pred)
   template<typename _II1 , typename _II2 > bool std::equal (_II1 __first1,
       _II1 __last1, _II2 __first2)
   template<typename _InputIterator , typename _Tp > _InputIterator
       std::find (_InputIterator __first, _InputIterator __last, const _Tp
       &__val)
   template<typename _ForwardIterator1 , typename _ForwardIterator2 ,
       typename _BinaryPredicate > _ForwardIterator1 std::find_end
       (_ForwardIterator1 __first1, _ForwardIterator1 __last1,
       _ForwardIterator2 __first2, _ForwardIterator2 __last2,
       _BinaryPredicate __comp)
   template<typename _ForwardIterator1 , typename _ForwardIterator2 >
       _ForwardIterator1 std::find_end (_ForwardIterator1 __first1,
       _ForwardIterator1 __last1, _ForwardIterator2 __first2,
       _ForwardIterator2 __last2)
   template<typename _InputIterator , typename _ForwardIterator , typename
       _BinaryPredicate > _InputIterator std::find_first_of (_InputIterator
       __first1, _InputIterator __last1, _ForwardIterator __first2,
       _ForwardIterator __last2, _BinaryPredicate __comp)
   template<typename _InputIterator , typename _ForwardIterator >
       _InputIterator std::find_first_of (_InputIterator __first1,
       _InputIterator __last1, _ForwardIterator __first2, _ForwardIterator
       __last2)
   template<typename _InputIterator , typename _Predicate > _InputIterator
       std::find_if (_InputIterator __first, _InputIterator __last,
       _Predicate __pred)
   template<typename _InputIterator , typename _Predicate > _InputIterator
       std::find_if_not (_InputIterator __first, _InputIterator __last,
       _Predicate __pred)
   template<typename _InputIterator , typename _Function > _Function
       std::for_each (_InputIterator __first, _InputIterator __last,
       _Function __f)
   template<typename _InputIterator1 , typename _InputIterator2 , typename
       _BinaryPredicate > pair< _InputIterator1, _InputIterator2 >
       std::mismatch (_InputIterator1 __first1, _InputIterator1 __last1,
       _InputIterator2 __first2, _BinaryPredicate __binary_pred)
   template<typename _InputIterator1 , typename _InputIterator2 > pair<
       _InputIterator1, _InputIterator2 > std::mismatch (_InputIterator1
       __first1, _InputIterator1 __last1, _InputIterator2 __first2)
   template<typename _InputIterator , typename _Predicate > bool
       std::none_of (_InputIterator __first, _InputIterator __last,
       _Predicate __pred)
   template<typename _ForwardIterator1 , typename _ForwardIterator2 ,
       typename _BinaryPredicate > _ForwardIterator1 std::search
       (_ForwardIterator1 __first1, _ForwardIterator1 __last1,
       _ForwardIterator2 __first2, _ForwardIterator2 __last2,
       _BinaryPredicate __predicate)
   template<typename _ForwardIterator1 , typename _ForwardIterator2 >
       _ForwardIterator1 std::search (_ForwardIterator1 __first1,
       _ForwardIterator1 __last1, _ForwardIterator2 __first2,
       _ForwardIterator2 __last2)
   template<typename _ForwardIterator , typename _Integer , typename _Tp ,
       typename _BinaryPredicate > _ForwardIterator std::search_n
       (_ForwardIterator __first, _ForwardIterator __last, _Integer
       __count, const _Tp &__val, _BinaryPredicate __binary_pred)
   template<typename _ForwardIterator , typename _Integer , typename _Tp >
       _ForwardIterator std::search_n (_ForwardIterator __first,
       _ForwardIterator __last, _Integer __count, const _Tp &__val)

πŸ”₯ Function Documentation πŸ”₯

πŸ“ std::adjacent_find β€” the one with _BinaryPredicate πŸ“

template<typename _ForwardIterator , typename _BinaryPredicate >
    _ForwardIterator std::adjacent_find (_ForwardIterator __first,
    _ForwardIterator __last, _BinaryPredicate __binary_pred) [inline]

okay so this one hunts for two adjacent values in a sequence using a predicate. πŸ’–

Parameters:

  • first β€” a forward iterator.
  • last β€” a forward iterator.
  • binary_pred β€” a binary predicate.

Returns: The first iterator i such that i and i+1 are both valid iterators in [first,last) and such that binary_pred(*i,*(i+1)) is true, or last if no such iterator exists.

Definition at line 4371 of file stl_algo.h.


πŸ¦‹ std::adjacent_find β€” no predicate, just equality πŸ¦‹

template<typename _ForwardIterator > _ForwardIterator std::adjacent_find
    (_ForwardIterator __first, _ForwardIterator __last) [inline]

Same little search mission, but no custom predicate β€” it's looking for two adjacent values in a sequence that are equal. Literally neighbors matching. ✨

Parameters:

  • first β€” a forward iterator.
  • last β€” a forward iterator.

Returns: The first iterator i such that i and i+1 are both valid iterators in [first,last) and such that *i == *(i+1), or last if no such iterator exists.

Definition at line 4339 of file stl_algo.h.


🌸 std::all_of 🌸

template<typename _InputIterator , typename _Predicate > bool std::all_of
    (_InputIterator __first, _InputIterator __last, _Predicate __pred)
    [inline]

Checks that a predicate is true for all the elements of a sequence. Like, every single one has to pass the vibe check. πŸ’…

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • pred β€” a predicate.

Returns: True if the check is true, false otherwise.

Returns true if pred is true for each element in the range [first,last), and false otherwise.

Definition at line 744 of file stl_algo.h.

References std::find_if_not().


πŸŽ€ std::any_of πŸŽ€

template<typename _InputIterator , typename _Predicate > bool std::any_of
    (_InputIterator __first, _InputIterator __last, _Predicate __pred)
    [inline]

Checks that a predicate is false for at least an element of a sequence β€” that's what the description line says, bestie. Then the Returns bit says true if an element exists where pred is true. Both facts stay. 🫢

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • pred β€” a predicate.

Returns: True if the check is true, false otherwise.

Returns true if an element exists in the range [first,last) such that pred is true, and false otherwise.

Definition at line 778 of file stl_algo.h.

References std::none_of().


🧚 std::count 🧚

template<typename _InputIterator , typename _Tp >
    iterator_traits<_InputIterator>::difference_type std::count
    (_InputIterator __first, _InputIterator __last, const _Tp & __value)
    [inline]

Counts the number of copies of a value in a sequence. It's literally doing inventory. πŸ“¦

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • value β€” the value to be counted.

Returns: The number of iterators i in the range [first,last) for which *i == value

Definition at line 4403 of file stl_algo.h.


πŸ’œ std::count_if πŸ’œ

template<typename _InputIterator , typename _Predicate >
    iterator_traits<_InputIterator>::difference_type std::count_if
    (_InputIterator __first, _InputIterator __last, _Predicate __pred)
    [inline]

Counts the elements of a sequence for which a predicate is true. Same counting energy, but the condition is your own custom little test. πŸ”₯

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • pred β€” a predicate.

Returns: The number of iterators i in the range [first,last) for which pred(*i) is true.

Definition at line 4428 of file stl_algo.h.


⭐ std::equal β€” with _BinaryPredicate ⭐

template<typename _IIter1 , typename _IIter2 , typename _BinaryPredicate >
    bool std::equal (_IIter1 __first1, _IIter1 __last1, _IIter2 __first2,
    _BinaryPredicate __binary_pred) [inline]

Tests a range for element-wise equality. Cute comparison behavior. πŸŽ€

Parameters:

  • first1 β€” an input iterator.
  • last1 β€” an input iterator.
  • first2 β€” an input iterator.
  • binary_pred β€” a binary predicate functor.

Returns: A boolean true or false.

This compares the elements of two ranges using the binary_pred parameter, and returns true or false depending on whether all of the corresponding elements of the ranges are equal.

Definition at line 984 of file stl_algobase.h.


🌈 std::equal β€” using == 🌈

template<typename _II1 , typename _II2 > bool std::equal (_II1 __first1,
    _II1 __last1, _II2 __first2) [inline]

Tests a range for element-wise equality, no custom predicate needed. πŸ’–

Parameters:

  • first1 β€” an input iterator.
  • last1 β€” an input iterator.
  • first2 β€” an input iterator.

Returns: A boolean true or false.

This compares the elements of two ranges using == and returns true or false depending on whether all of the corresponding elements of the ranges are equal.

Definition at line 952 of file stl_algobase.h.

Referenced by std::operator==().


πŸ¦„ std::find πŸ¦„

template<typename _InputIterator , typename _Tp > _InputIterator std::find
    (_InputIterator __first, _InputIterator __last, const _Tp & __val)
    [inline]

Finds the first occurrence of a value in a sequence. First match wins, periodt. πŸ‘‘

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • val β€” the value to find.

Returns: The first iterator i in the range [first,last) such that *i == val, or last if no such iterator exists.

Definition at line 4215 of file stl_algo.h.

References std::__find(), and std::__iterator_category().


🫢 std::find_end β€” with _BinaryPredicate 🫢

template<typename _ForwardIterator1 , typename _ForwardIterator2 , typename
    _BinaryPredicate > _ForwardIterator1 std::find_end (_ForwardIterator1
    __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
    _ForwardIterator2 __last2, _BinaryPredicate __comp) [inline]

Finds the last matching subsequence in a sequence using a predicate. Like, it's searching from the back of the group chat for the matching thread. 😭

Parameters:

  • first1 β€” start of range to search.
  • last1 β€” end of range to search.
  • first2 β€” start of sequence to match.
  • last2 β€” end of sequence to match.
  • comp β€” the predicate to use.

Returns: The last iterator i in the range [first1,last1-(last2-first2)) such that predicate(*(i+N), (first2+N)) is true for each N in the range [0,last2-first2), or last1 if no such iterator exists.

πŸ¦‹ std::find_end β€” the one that takes comp

okay so this version hunts through [first1,last1) for a sub-sequence that compares equal value-by-value to the sequence given by [first2,last2) β€” except it uses comp as the predicate instead of plain ==. It hands you back an iterator to the first element of that sub-sequence, or last1 if the sub-sequence just isn't in there. And bestie, the sub-sequence it finds will be the last such subsequence contained in [first,last1). πŸ’…

Because the sub-sequence has to lie completely within [first1,last1), it must start at a position less than last1-(last2-first2), where last2-first2 is the length of the sub-sequence. Which means the returned iterator i will be in the range [first1,last1-(last2-first2)). no cap. ✨

Definition at line 710 of file stl_algo.h.

References std::__iterator_category().


πŸ’– std::find_end β€” find the last matching subsequence

template<typename _ForwardIterator1, typename _ForwardIterator2>
_ForwardIterator1 std::find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                                _ForwardIterator2 __first2, _ForwardIterator2 __last2) [inline]

Find last matching subsequence in a sequence. πŸŽ€

Parameters:

  • first1 β€” start of range to search.
  • last1 β€” end of range to search.
  • first2 β€” start of sequence to match.
  • last2 β€” end of sequence to match.

Returns: the last iterator i in the range [first1,last1-(last2-first2)) such that *(i+N) == *(first2+N) for each N in the range [0,last2-first2), or last1 if no such iterator exists.

It searches the range [first1,last1) for a sub-sequence that compares equal value-by-value with the sequence given by [first2,last2) and returns an iterator to the first element of the sub-sequence, or last1 if the sub-sequence is not found. And again: the sub-sequence will be the last such subsequence contained in [first,last1). 🫢

Because the sub-sequence must lie completely within the range [first1,last1) it must start at a position less than last1-(last2-first2) β€” last2-first2 being the length of the sub-sequence. This means the returned iterator i will be in the range [first1,last1-(last2-first2)). literally the same energy as above. 😌

Definition at line 663 of file stl_algo.h.

References std::__iterator_category().


🌈 std::find_first_of β€” with a predicate

template<typename _InputIterator, typename _ForwardIterator, typename _BinaryPredicate>
_InputIterator std::find_first_of(_InputIterator __first1, _InputIterator __last1,
                                  _ForwardIterator __first2, _ForwardIterator __last2,
                                  _BinaryPredicate __comp) [inline]

Find element from a set in a sequence, but using a predicate. πŸ”₯

Parameters:

  • first1 β€” start of range to search.
  • last1 β€” end of range to search.
  • first2 β€” start of match candidates.
  • last2 β€” end of match candidates.
  • comp β€” predicate to use.

Returns: the first iterator i in the range [first1,last1) such that comp(*i, *(i2)) is true and i2 is an iterator in [first2,last2), or last1 if no such iterator exists.

So it searches [first1,last1) for an element that's equal to some element in [first2,last2). Found it? You get an iterator in the range [first1,last1). Not found? last1. that's it, that's the vibe. ✨

Definition at line 4308 of file stl_algo.h.

πŸŽ€ std::find_first_of β€” the no-predicate version

template<typename _InputIterator, typename _ForwardIterator>
_InputIterator std::find_first_of(_InputIterator __first1, _InputIterator __last1,
                                  _ForwardIterator __first2, _ForwardIterator __last2) [inline]

Find element from a set in a sequence. 🌸

Parameters:

  • first1 β€” start of range to search.
  • last1 β€” end of range to search.
  • first2 β€” start of match candidates.
  • last2 β€” end of match candidates.

Returns: the first iterator i in the range [first1,last1) such that *i == *(i2) where i2 is an iterator in [first2,last2), or last1 if no such iterator exists.

Searches the range [first1,last1) for an element that is equal to some element in the range [first2,last2). If found, returns an iterator in the range [first1,last1); otherwise returns last1. simple as that bestie πŸ’…

Definition at line 4268 of file stl_algo.h.

🧚 std::find_if β€” predicate says yes

template<typename _InputIterator, typename _Predicate>
_InputIterator std::find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) [inline]

Find the first element in a sequence for which a predicate is true. πŸ‘‘

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • pred β€” a predicate.

Returns: the first iterator i in the range [first,last) such that pred(*i) is true, or last if no such iterator exists.

Definition at line 4239 of file stl_algo.h.

References std::__find_if(), and std::__iterator_category().


πŸ“ std::find_if_not β€” predicate says nope

template<typename _InputIterator, typename _Predicate>
_InputIterator std::find_if_not(_InputIterator __first, _InputIterator __last, _Predicate __pred) [inline]

Find the first element in a sequence for which a predicate is false. πŸ™ˆ yes, it's the inverse girlie.

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • pred β€” a predicate.

Returns: the first iterator i in the range [first,last) such that pred(*i) is false, or last if no such iterator exists.

Definition at line 793 of file stl_algo.h.

References std::__find_if_not(), and std::__iterator_category().

Referenced by std::all_of(), and std::is_partitioned().


πŸ’œ std::for_each β€” do the thing to every element

template<typename _InputIterator, typename _Function>
_Function std::for_each(_InputIterator __first, _InputIterator __last, _Function __f) [inline]

Apply a function to every element of a sequence. 🫢

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • f β€” a unary function object.

Returns: f.

It applies the function object f to each element in the range [first,last). Important: f must not modify the order of the sequence β€” do not be out here rearranging things, bestie 😭. And if f has a return value, it's ignored. periodt.

Definition at line 4194 of file stl_algo.h.

⭐ std::mismatch β€” the predicate edition

template<typename _InputIterator1, typename _InputIterator2, typename _BinaryPredicate>
pair<_InputIterator1, _InputIterator2> std::mismatch(_InputIterator1 __first1,
                                                     _InputIterator1 __last1,
                                                     _InputIterator2 __first2,
                                                     _BinaryPredicate __binary_pred) [inline]

Finds the places in ranges which don't match. πŸ’€

Parameters:

  • first1 β€” an input iterator.
  • last1 β€” an input iterator.
  • first2 β€” an input iterator.
  • binary_pred β€” a binary predicate functor.

Returns: a pair of iterators pointing to the first mismatch.

This compares the elements of two ranges using the binary_pred parameter, and returns a pair of iterators. The first iterator points into the first range, the second iterator points into the second range, and the elements pointed to by the iterators are not equal. iconic honestly.

Definition at line 1128 of file stl_algobase.h.

🌈 std::mismatch β€” the == edition

template<typename _InputIterator1, typename _InputIterator2>
pair<_InputIterator1, _InputIterator2> std::mismatch(_InputIterator1 __first1,
                                                     _InputIterator1 __last1,
                                                     _InputIterator2 __first2) [inline]

Finds the places in ranges which don't match. πŸ¦‹

Parameters:

  • first1 β€” an input iterator.
  • last1 β€” an input iterator.
  • first2 β€” an input iterator.

Returns: a pair of iterators pointing to the first mismatch.

This compares the elements of two ranges using == and returns a pair of iterators. The first iterator points into the first range, the second iterator points into the second range, and the elements pointed to by the iterators are not equal. same energy, no custom predicate needed ✨

Definition at line 1090 of file stl_algobase.h.

πŸ”₯ std::none_of β€” nobody gets a yes

template<typename _InputIterator, typename _Predicate>
bool std::none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) [inline]

Checks that a predicate is false for all the elements of a sequence. πŸ‘‘

Parameters:

  • first β€” an input iterator.
  • last β€” an input iterator.
  • pred β€” a predicate.

Returns: true if the check is true, false otherwise.

So: returns true if pred is false for each element in the range [first,last), and false otherwise. yeah that's the whole thing πŸ’…

Definition at line 761 of file stl_algo.h.

Referenced by std::any_of(), and std::is_partitioned().


🌸 std::search β€” sub-sequence hunting with a predicate

template<typename _ForwardIterator1, typename _ForwardIterator2, typename _BinaryPredicate>
_ForwardIterator1 std::search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                              _ForwardIterator2 __first2, _ForwardIterator2 __last2,
                              _BinaryPredicate __predicate) [inline]

Search a sequence for a matching sub-sequence, using a predicate. 🧚

Parameters:

  • first1 β€” a forward iterator.
  • last1 β€” a forward iterator.
  • first2 β€” a forward iterator.
  • last2 β€” a forward iterator.
  • predicate β€” a binary predicate.

Returns: the first iterator i in the range [first1,last1-(last2-first2)) such that predicate(*(i+N),*(first2+N)) is true for each N in the range [0,last2-first2), or last1 if no such iterator exists.

It searches the range [first1,last1) for a sub-sequence that compares equal value-by-value with the sequence given by [first2,last2), using predicate to determine equality, and returns an iterator to the first element of the sub-sequence β€” or last1 if no such iterator exists. ate. πŸ’–

See also: search(_ForwardIter1, _ForwardIter1, _ForwardIter2, _ForwardIter2)

Definition at line 4540 of file stl_algo.h.

πŸŽ€ std::search β€” sub-sequence hunting, plain and simple

template<typename _ForwardIterator1, typename _ForwardIterator2>
_ForwardIterator1 std::search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
                              _ForwardIterator2 __first2, _ForwardIterator2 __last2) [inline]

Search a sequence for a matching sub-sequence. ✨

Parameters:

  • first1 β€” a forward iterator.
  • last1 β€” a forward iterator.
  • first2 β€” a forward iterator.
  • last2 β€” a forward iterator.

Returns: the first iterator i in the range [first1,last1-(last2-first2)) such that *(i+N) == *(first2+N) for each N in the range [0,last2-first2), or last1 if no such iterator exists.

Searches the range [first1,last1) for a sub-sequence that compares equal value-by-value with the sequence given by [first2,last2) and returns an iterator to the first element of the sub-sequence, or last1 if the sub-sequence is not found. 🫢

Because the sub-sequence must lie completely within the range [first1,last1) it must start at a position less than last1-(last2-first2) where last2-first2 is the length of the sub-sequence. This means the returned iterator i will be in the range [first1,last1-(last2-first2)). iykyk πŸ’…

Definition at line 4468 of file stl_algo.h.

πŸ“ std::search_n β€” a whole run of the same value

template<typename _ForwardIterator, typename _Integer, typename _Tp, typename _BinaryPredicate>
_ForwardIterator std::search_n(_ForwardIterator __first, _ForwardIterator __last,
                               _Integer __count, const _Tp & __val,
                               _BinaryPredicate __binary_pred) [inline]

Search a sequence for a number of consecutive values, using a predicate. πŸ”

Parameters:

  • first β€” a forward iterator.
  • last β€” a forward iterator.
  • count β€” the number of consecutive values.
  • val β€” the value to find.
  • binary_pred β€” a binary predicate.

...and that's a wrap on that overload! πŸŽ€

Returns: the very first iterator i in the range [first,last-count) where binary_pred(*(i+N),val) is true for every N in the range [0,count) β€” or last if no such iterator exists. iykyk, no match = last, always. πŸ’…

It searches the range [first,last) for count consecutive elements for which the predicate returns true. Bestie, it's literally hunting for a streak, not a single hit. πŸ”₯

Definition at line 4650 of file stl_algo.h.

References std::__iterator_category(), and std::__search_n().


✨ the no-predicate version, aka the one you'll actually reach for ✨

template<typename _ForwardIterator , typename _Integer , typename _Tp >
    _ForwardIterator std::search_n (_ForwardIterator __first,
    _ForwardIterator __last, _Integer __count, const _Tp & __val) [inline]

Search a sequence for a number of consecutive values. Yes, exactly what it sounds like β€” the icon of "find me N of these in a row". πŸ‘‘

Parameters:

  • first β€” a forward iterator. 🫢
  • last β€” a forward iterator. (yes, another one, it takes two, that's how ranges work bestie)
  • count β€” the number of consecutive values. πŸ“
  • val β€” the value to find.

Returns: the first iterator i in the range [first,last-count) such that *(i+N) == val for each N in the range [0,count), or last if no such iterator exists. Same energy as the predicate one, just without the custom comparison β€” plain old == doing its thing. πŸ’–

It searches the range [first,last) for count consecutive elements equal to val.

Definition at line 4613 of file stl_algo.h.

References std::__iterator_category(), and std::__search_n().


🌸 Author 🌸

Generated automatically by Doxygen for libstdc++ from the source code. Not a human, not a vibe, just Doxygen doing Doxygen things. πŸ€–βœ¨


okay bye bestie!! πŸ’œ This whole page is libstdc++, dated 21 Apr 2009, straight out of the libstdc++ manual β€” go forth and search_n responsibly, mwah πŸŽ€πŸ¦‹πŸ’…

πŸ“¦ where this page comes from