/* Copyright (c) Alexander Zaitsev , 2016 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) For more information, see http://www.boost.org */ #include #include #include #include #include #include namespace ba = boost::algorithm; template bool funcComparator(const T& v1, const T& v2) { return v1 == v2; } struct functorComparator { template bool operator()(const T& v1, const T& v2) const { return v1 == v2; } }; int main ( int /*argc*/, char * /*argv*/ [] ) { //You can this algorithm with iterators(minimum Bidirectional) std::vector vec{1,2,1}; if(ba::is_palindrome(vec.begin(), vec.end())) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; //Of course, you can use const iterators if(ba::is_palindrome(vec.cbegin(), vec.cend())) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; //Example with bidirectional iterators std::list list{1,2,1}; if(ba::is_palindrome(list.begin(), list.end())) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; //You can use custom comparators like functions, functors, lambdas auto lambdaComparator = [](int v1, int v2){ return v1 == v2; }; auto objFunc = std::function(lambdaComparator); if(ba::is_palindrome(vec.begin(), vec.end(), lambdaComparator)) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; if(ba::is_palindrome(vec.begin(), vec.end(), funcComparator)) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; if(ba::is_palindrome(vec.begin(), vec.end(), functorComparator())) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; if(ba::is_palindrome(vec.begin(), vec.end(), objFunc)) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; //You can use ranges if(ba::is_palindrome(vec)) std::cout << "This container is palindrome" << std::endl; else std::cout << "This container is not palindrome" << std::endl; //You can use C-strings if(ba::is_palindrome("aba")) std::cout << "This C-string is palindrome" << std::endl; else std::cout << "This C-string is not palindrome" << std::endl; return 0; }