Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

is_palindrome

Boost , The Boost Algorithm Library , Other Algorithms

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Файл заголовка 'is_palindrome.hpp' содержит шесть вариантов одного алгоритма, is_palindrome. Алгоритм проверяет последовательность и возвращает истинность, если последовательность является палиндромом; то есть она идентична при прохождении либо назад, либо вперед.

Рутина— это палиндромпринимает последовательность и, необязательно, предикат. Он вернётся истинным, если предикат вернётся истинным для тестируемых элементов алгоритмом в последовательности.

Обычай состоит из 6 форм; для определения диапазона требуется два итератора. Вторая форма требует двух итераторов для определения диапазона и предиката. Третья форма принимает один параметр диапазона и использует Boost. Диапазон, чтобы пройти его. Четвертая форма принимает один параметр диапазона (используется Boost). Дальность его прохождения) и предикат. Пятая форма принимает одну C-струну и предикат. Шестая форма состоит из одной C-струны.

interface

Функция— палиндромвозвращает истинное, если предикат возвращает истинное любое проверенное элементами алгоритма в последовательности. Существует шесть версий: 1) принимает два итератора. 2) берет два итератора и предикат. 3) принимает диапазон. 4) принимает диапазон и предикат. 5) принимает C-струну и предикат. 6) принимает C-струну.

template<typename BidirectionalIterator>
	bool is_palindrome ( BidirectionalIterator begin, BidirectionalIterator end );
template<typename BidirectionalIterator, typename Predicate>
	bool is_palindrome ( BidirectionalIterator begin, BidirectionalIterator end, Predicate p );
template<typename Range>
	bool is_palindrome ( const Range &r );
template<typename Range, typename Predicate>
	bool is_palindrome ( const Range &r, Predicate p );
template<typename Predicate>
	bool is_palindrome ( const char* str, Predicate p );
bool is_palindrome(const char* str);

Examples

Учитывая контейнеры: const std::listempty, const std::vectorsingleElement{'z'}, int oddNonPalindrome[] = {3,2,2}, const int oddPalindrome[] = {1,2,3,2,1}, const int evenPalindrome[] = {1,2,2,1}, int evenNonPalindrome[] = {1,4,8,8}, то

is_palindrome(empty))  --> true //empty range                                                                       
is_palindrome(singleElement))  --> true
is_palindrome(std::begin(oddNonPalindrome), std::end(oddNonPalindrome))) --> false
is_palindrome(std::begin(evenPalindrome), std::end(evenPalindrome))) --> true
is_palindrome(empty.begin(), empty.end(), functorComparator())) --> true //empty range                             
is_palindrome(std::begin(oddNonPalindrome), std::end(oddNonPalindrome), funcComparator<int>)) --> false
is_palindrome(std::begin(oddPalindrome), std::end(oddPalindrome)) --> true
is_palindrome(evenPalindrome, std::equal_to<int>())) --> true
is_palindrome(std::begin(evenNonPalindrome), std::end(evenNonPalindrome)) --> false
is_palindrome("a") --> true
is_palindrome("aba", std::equal_to<char>()) --> true

Iterator Requirements

is_palindromework on Bidirectional and RandomAccess iterators.

Complexity

Все варианты— этозапускаются вO(N)(линейное) время; то есть они сравниваются с каждым элементом в списке один раз. Если какое-либо из сравнений не увенчается успехом, алгоритм немедленно прекратит работу, не изучив оставшиеся элементы последовательности.

Exception Safety

Все вариантыis_palindromeберут свои параметры по значению, указателю const или ссылке const и не зависят от какого-либо глобального состояния. Таким образом, все процедуры в этом файле обеспечивают сильную гарантию исключения.

Notes
  • is_palindromeReturns true for empty ranges, const char* null pointers and for single element ranges.
  • Если вы используете версию «is_palindrome» без пользовательского предиката, «is_palindrome» использует по умолчанию «оператор ==()» для элементов.
  • Будьте осторожны с использованием не нулевого указателя «const char*» без «\0» - если вы используете его с «is_palindrome», это неопределенное поведение.

PrevUpHomeNext

Статья is_palindrome раздела The Boost Algorithm Library Other Algorithms может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Other Algorithms ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-04 22:54:45/0.0040512084960938/0