Форум » C/C++ для начинающих (C/C++ for beginners) » Как проверить, является объект класса std::stack палиндромом или нет, не изменяя сам объект? » Ответить

Как проверить, является объект класса std::stack палиндромом или нет, не изменяя сам объект?

Сыроежка: Недавно встретил такой вопрос: как проверить, является ли содержимое объекта класса std::stack палиндромом или нет, не изменяя при этом сам объект. То есть делать такие операции со стеком, как pop или push, не разрешается. Выполнить эту задачу можно, создав "обертку" для класса std::stack. Ниже представлена соответствующая демонстрационная программа. [pre2] #include <iostream> #include <iomanip> #include <stack> #include <iterator> #include <algorithm> bool is_palindrome( const std::stack<int> &st ) { struct wrapper : std::stack<int> { wrapper( const std::stack<int> &st ) : std::stack<int>( st ) {} bool is_palindrome() const { return std::equal( std::begin( c ), std::next( std::begin( c ), c.size() / 2 ), std::rbegin( c ) ); } } w( st ); return w.is_palindrome(); } int main() { std::stack<int> st1( std::stack<int>::container_type{ 1, 2, 3, 2, 1 } ); std::cout << std::boolalpha << is_palindrome( st1 ) << '\n'; std::stack<int> st2( std::stack<int>::container_type{ 1, 2, 3, 4, 5 } ); std::cout << std::boolalpha << is_palindrome( st2 ) << '\n'; return 0; }[/pre2] Вывод программы на консоль [pre2] true false[/pre2]

Ответов - 0



полная версия страницы