Я не могу говорить за других, но я думаю, что неосторожное использование аббревиатуры "STL" является интеллектуально нечестным. Если вы хотите сослаться на "стандартную библиотеку C++", так и скажите. Аббревиатура может означать много разных вещей, включая стандартную библиотеку, оригинальную реализацию STL (которой более десяти лет) или любой из ее портов. Для получения дополнительной информации см. Что такое STL по сравнению с "C++ «Стандартная библиотека»?
Что касается изучения C++, многие студенты, кажется, пренебрегают одним из самых важных (и очень дорогих) ресурсов, которые у них есть, — школой. Если у вас возникли проблемы, всегда сначала обратитесь к учителю. Спросите помощника учителя. Спросите других студентов. Найдите репетитора в кампусе. Нажми на библиотеку. Если в вашей библиотеке нет нужной вам книги, попросите, чтобы ее доставили в ваш кампус. Но я дам вам презумпцию сомнения и предполагаю, что вы уже сделали это.
Если вам нужна справка, попробуйте cppreference. Для новичка разобрать не очень просто, хотя значительно упрощает язык от стандартного. Если вам нужен учебник, попробуйте любую из миллионов книг Бьерна Страуструпа. (преувеличение). Язык программирования C++ (4-е издание) — хороший выбор. На веб-сайте ISO C++ также перечислены популярные компиляторы, интерактивные компиляторы и небольшой список книг, написанных деятелями C++ (Херб Саттер , Скотт Мейерс и т. д.) Существует также C++-faq Маршалла Клайна (разные авторы).
Люди также, похоже, забывают, что StackOverflow — это ресурс. Люди потратили сотни часов на faq c++ и даже просто сортировать вопросы C++ по голосам дает много высококачественного контента для просмотра. Если этого недостаточно, отсортируйте страницу пользователя по репутации и найдите пользователей. которые являются экспертами в C++ и читают их вопросы и ответы. Вы не можете сказать, что не смогли найти ответ на свою проблему после всего этого.
Ничто из того, что я написал до сих пор, не является ответом на вопрос, поэтому давайте решим вашу проблему.
Ваш текущий код показывает:
int main()
int i = 0;
{
int array[];
vector<int> integers (array, array+ array.size)
for (i=0; i<array.size, i++)
cin>>a[i];
vector<int>::const_reverse_iterator reverse iterator;
Первая проблема — это ваша декларация стиля K&R. int i = 0
нужно внутри файла main. Затем у вас есть массив неизвестных границ. В данном контексте это недопустимо. Просто начните с std::vector
, здесь массив не нужен. И, наконец, вам не нужен reverse_iterator
, и я покажу вам, почему через секунду.
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
int current_num;
while (std::cin >> current_num)
v.push_back(current_num);
}
Эта идиома, std::cin >> current_num
, полезна, потому что она лаконична и цикл завершится корректно (т. е. при неправильном вводе пользователя или EOF). См. Почему iostream::eof внутри условия цикла считается неправильным ? для более подробного объяснения.
Теперь вы хотите напечатать целые числа в обратном порядке. У вас есть три способа сделать это:
std::sort(v.rbegin(), v.rend());
std::reverse(v.begin(), v.end()); // #include <algorithm>
Затем выполните цикл и распечатайте каждый элемент. Или используйте цикл, который выполняет итерацию по вектору в обратном направлении при печати каждого элемента. Два приведенных выше метода практически эквивалентны, но я включил rbegin()
, потому что он возвращает обратный итератор, демонстрируя, что вам не нужно иметь дело с голым итератором.
Я не буду давать длинных объяснений, потому что сейчас 3:30 утра, но, надеюсь, это поможет вам начать. Удачи.
person
Community
schedule
25.11.2014
new
. Это ключевое слово больше не должно появляться в повседневном коде, ИМО. - person Chnossos   schedule 25.11.2014new
плохой, ОП так же невежественен, как и раньше. - person   schedule 25.11.2014new
и выполняя ручное управление памятью, что привело к тому, что ученики так и не научились более современному и простому способу, используя средства, уже предоставленные STL. Тем не менее, это все еще полезно для понимания ручного способа, если он вам действительно нужен, но это следует преподавать после того, как студенты уже знакомы с простым способом STL. - person user1942027   schedule 25.11.2014const_reverse_iterator
... вам нужно будет использоватьrbegin()
иrend()
. Быстрый Google должен предоставить вам примеры. Вам не нужны ниint array[]
, ниint i
. Попробуйте начать с самых простых вещей и продолжайте компилировать программу. Используйте 'std::cout ‹‹ xyz ‹‹ std::endl;' для вывода переменных во время работы вашей программы, чтобы вы могли убедиться, что она делает то, что вы ожидаете, например, - выведитеintegers.size()
, чтобы увидеть увеличение размера вектора. - person Tony Delroy   schedule 25.11.2014