Каков наиболее эффективный способ вывода строк, хранящихся в стеке, но с обратным порядком букв строк? - PullRequest
0 голосов
/ 10 ноября 2018

То, что делает программа, позволяет пользователю вводить несколько строк, сохранять их в стеке, а затем выводить все эти строки в стеке, но в обратном порядке и переворачивать.Есть ли более эффективный способ сделать то, что я сделал?Может быть, использовать другую структуру данных (кроме стека)?Я думаю, что стек лучше, потому что строки, хранящиеся в стеках, должны выводиться в том порядке, в котором они были введены.

Вот код:

#include <iostream>
#include <stack>

using namespace std;

int main() {
    stack <string> elements;
    string element;

    cout << "Hello, welcome to Flippy-McBackwardson! \n\n" << endl;

    cout << "Please enter a bunch of strings (type END to terminate your list): " << endl;

    do {
        getline(cin, element);

        elements.push(element);
    } while (element != "END");

    elements.pop();

    cout << "\nFlippy Backward Version: " << endl;

    for (int x = elements.size()-1; x >= 0; x--){
        for (int i = elements.top().length()-1; i >= 0; i--){
            cout << elements.top()[i];
        }
        elements.pop();
        cout << endl;
    }

    return 0;
}

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете использовать обратные итераторы (доступны с использованием std::rbegin() и std::rend()), которые должны быть чище и безопаснее, поскольку в них не используется сложная математика подписки, склонная к отключению -он ошибок (как минимум).

while(!elements.empty())
{
    std::for_each(std::rbegin(elements.top()), std::rend(elements.top()),
        [](char c){ std::cout << c; });

    std::cout << '\n';

    elements.pop();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...