Професионална програма
Loading...
+ Нов въпрос
lazar.malezanov avatar lazar.malezanov 1 Точки

Sentence Shifter

Здравейте! Опитвам се да подкарам задачата Sentence Shifter в judge, но ми дава следната грешка:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

Локално при мен (на VS 2019) работи. Сетнах стандарта на c++ 11, но продължава да работи при мен, но не и в judge. Ето кодът ми:

#include<iostream>
#include<queue>
#include<sstream>

void printCollection(const std::deque<std::string>& collection) {
    for (const auto& word : collection) {
        std::cout << word << std::endl;
    }
}

void readInput(std::deque<std::string>& inputWords, size_t& inputShift) {
    std::string line;
    getline(std::cin, line);
    std::istringstream istr(line);

    std::string word;
    while (istr >> word) {
        inputWords.push_back(word);
    }

    std::cin >> inputShift;
    std::cin.ignore();
}

class Shifter {
public:
    Shifter(std::deque<std::string> words) { 
        _words = words;
    }

    void shiftWords(size_t shiftsCount) {
        if (_words.empty()) {
            return;
        }
        for (size_t i = 0; i < shiftsCount; ++i) {
            const auto lastword = _words.back();
            _words.pop_back();
            _words.push_front(lastword);
        }
    }
    
    std::deque<std::string> getShiftedSentence() {
        return _words;
    }
private:
    std::deque<std::string> _words;
};

int main() {
    std::deque<std::string> inputWords;
    size_t inputShift;
    readInput(inputWords, inputShift);

    Shifter shifter = Shifter(inputWords);
    shifter.shiftWords(inputShift);
    const auto result = shifter.getShiftedSentence();

    printCollection(result);
}

Тагове:
0
C++ OOP
j.petrov_90 avatar j.petrov_90 285 Точки

Привет, Лазар :)

Задачата ти ми се струва вярна.
Единственото, което бих променил е да не копирам излишно в конструктора:
 

 Shifter(std::deque<std::string> words) { 
        _words = words;
    }

на
 

 Shifter(const std::deque<std::string>& words) : _words(words ){ 
    }


Може би нямаш и нужда от copy constructor.
 

Shifter shifter = Shifter(inputWords);

Нормален конструктор би ти свършил работа:
 

Shifter shifter(inputWords);



Сега погледнах задачата ти в Judge.
Изглежда, че си изпратил друга задача, която няма нищо общо. Изглежда ми като задачата Letters от лаба.

Пробвай да изпратиш тази версия.

П.С. пуснах твоята задача в Judge и минава със 100 от 100.

1