- Привет, я недавно работал с вектором, но кажется, что когда я вводил «3 + 2 + 1» или около того, мой ожидаемый результат был бы " 1 + 2 + 3" консоль говорит: "Terminate вызывается после метания экземпляр 'станд :: out_of_range' исходная задача из:. http://www.codeforces.com/problemset/problem/339/A Что моя проблема Thks за помощь !.
#include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); vector <int> a; string str; cin>>str; for(int i = 0; i < str.size(); i++){ if(str[i]!='+') { int c = str[i]-'0'; a.push_back(c); } } sort(a.begin(), a.end()); cout<<a.at(0); for(int j = 1; j < str.size(); j++){ cout<<'+'<<a.at(j); } return 0; }
1
A
ответ
1
Вы? необходимо изменить условие остановки цикла для остановки по размеру вектора, а не строки. Поэтому измените свой последний цикл на следующие
for(int j = 1; j < a.size(); j++){
cout<<'+'<<a.at(j);
}
Далее, если вы хотите вывести все значения в формате вы указали вы хотели бы сделать следующий
assert(!a.empty());
for(int j = 0; j < a.size() - 1; j++){
cout << a.at(j) << '+';
}
cout << a.back() << endl;
Одна последней вещью, о вашей реализации. Если вам всегда будет задана строка формата «a + b + c + d», вам не нужен вектор для изменения последовательности и печати. Вы можете просто сделать следующее:
std::reverse(str.begin(), str.end()); // #include <algorithm>
И тогда строка будет иметь нужную вам последовательность. Если вы не хотите, чтобы сделать это на месте, и нужно еще один контейнер можно сделать
// #include <iterator> and #include <algorithm>
string other_string;
std::copy(str.crbegin(), str.crend(), std::back_inserter(other_string));
^Это будет копировать строку в обратном порядке на другую строку объект.
Смежные вопросы
- 1. gdb not catching std :: out_of_range, отбрасываемый вектором
- 2. C++ 'std :: out_of_range'
- 3. Сценарий SpriteKit с std :: out_of_range: проблема с вектором
- 4. Обработка исключений std :: out_of_range C++
- 5. C++ std :: out_of_range в ячейке памяти
- 6. std :: out_of_range ошибка?
- 7. Ошибка «std :: out_of_range» Ошибка
- 8. std :: out_of_range ошибка доступа к std :: string в C++
- 9. C++ string std :: out_of_range: basic_string :: substr
- 10. Исключение Microsoft C++: ошибка std :: out_of_range?
- 11. std :: out_of_range в ячейке памяти
- 12. std :: out_of_range при установке QLineEdit
- 13. завершение с неперехваченным исключением типа std :: out_of_range: vector C++
- 14. std :: string constructor throws std :: out_of_range exception
- 15. Получить расширение std :: out_of_range error
- 16. std :: out_of_range исключение при ловле?
- 17. C++ Game Запущено завершение вызова после вызова экземпляра 'std :: out_of_range'
- 18. Почему я получаю ошибку std :: out_of_range?
- 19. Конструктор векторов C++ выбрасывает исключение std :: out_of_range (Microsoft C++ stdlib)
- 20. C++ прекратить называется кинув экземпляр «станд :: out_of_range», вектор строки
- 21. утечка памяти std :: управление вектором C++
- 22. std :: stoi, std :: setbase и std :: out_of_range error
- 23. где класс std :: out_of_range полностью определен?
- 24. завершение вызова после вызова экземпляра 'std :: out_of_range'
- 25. std :: out_of_range при ошибке памяти при getline
- 26. C++ проблемы с вектором
- 27. C++ Terminate вызвал после бросания экземпляра 'std :: out_of_range'
- 28. завершение вызова после вызова экземпляра 'std :: out_of_range'
- 29. MS VC++ 2008 Ошибка компоновщика std :: out_of_range
- 30. Завершить вызов после экземпляра 'std :: out_of_range' what(): basic_string :: compare C++
Отлично, что вы сказали, работало идеально, спасибо большое. У меня есть вопрос: «Какая польза от« assert (! A.empty()) »; –
@ DanielRodríguezMeza Если бы ответ был тем, что вы хотели, можете ли вы его принять и пожалуйста? Вам нужно будет проверить флажок с небольшим оттенком серого цвета рядом с моим ответом. – Curious
Я очень ценю большое спасибо, но не могу понять использование «assert (! A.empty()); –