2014-11-25 2 views
2

Новых в стандартную библиотеке контейнеры и мой учитель задал вопрос, как это в конце лекции сегодня для нас, чтобы узнать ихC++ программа с использованием стандартных библиотек контейнеров

написать программу на C++, который не читает Int со стандартного ввода до конца файла, а затем печатает их в обратном порядке - по одному на строку. Для хранения данных используйте стандартные библиотечные контейнеры. Нет использования нового оператора.

Как бы это сделать, если бы мне пришлось использовать стандартные библиотечные контейнеры?

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; 

^^ Это мой псевдокод до сих пор, все еще попадая туда. Любая обратная связь?

+0

вы можете попробовать std :: vector, std :: list и т. Д. –

+0

Вы должны получить хорошую ссылку для этих библиотек, например: http://en.cppreference.com/w/ Использование «STL «не сложно. –

+7

Поздравляем вашего учителя за то, что они учат своих студентов использовать стандартную библиотеку. – Shoe

ответ

0

Если вы начинаете, лучше всего std :: vector.

vector<int> v; 
int temp = 0; 

while(cin>>temp) 
{ 
    v.push_back(temp); 
} 

for(int i=0; i<v.size(); i++) 
    cout<<v[v.size()-1-i] <<endl; 
+0

Люди могут спорить о том, хорошо ли предлагать полное решение для домашней работы, но downvoting это немного жестко - особенно, поскольку это от нового пользователя .... +1 –

+0

@TonyD Но есть более простые способы итерации по элементам вектора в обратном порядке. Это ошибка и она не нужна. Хороший совет будет «взглянуть на то, что может сделать для вас вектор». Этот ответ даже не следует этому базовому совету. – juanchopanza

+1

@juanchopanza Да, я знаю это, но когда вы видите, что кто-то начинает изучать новую тему и спрашивает о очень простых темах, это не хороший ответ, чтобы обеспечить слишком сложный ответ. Прежде всего. Узнайте о векторе, а затем перейдите к более продвинутым темам (например, итераторам) после тестирования некоторых базовых функций. Это мое мнение. – MateuszZawadzki

4

Я не могу говорить за других, но я думаю, что небрежное использование аббревиатуры «СТЛ» интеллектуально нечестно. Если вы хотите обратиться к «стандартной библиотеке C++», скажите так. Аббревиатура может означать много разных вещей, включая стандартную библиотеку, оригинальную реализацию STL (которая старше десятилетия) или любой из ее портов. Для получения дополнительной информации см. What's this STL vs. “C++ Standard Library” fight all about?

С точки зрения изучения C++, многие студенты, по-видимому, пренебрегают одним из самых важных (и очень дорогостоящих) ресурсов, которые у них есть, что является их школой. Если у вас есть проблема, всегда спросите своего учителя. Спросите помощника учителя. Спросите других студентов. Найдите наставника на кампусе. Хит библиотеку. Если в вашей библиотеке нет нужной вам книги, попросите ее доставить ее в ваш университетский городок. Но я дам вам преимущество от сомнений и предположим, что вы уже это сделали.

Если вы хотите получить ссылку, попробуйте cppreference. Для новичков это не очень легко разобрать, хотя это значительно упрощает язык из стандарта. Если вы хотите получить учебник, попробуйте любой из миллионов книг (преувеличение) Bjarne Stroustrup. The C++ Programming Language (4th Edition) - хороший выбор. На веб-сайте ISO C++ также перечислены популярные компиляторы, онлайн-компиляторы и небольшой список книг персонажей C++ (Herb Sutter, Scott Meyers и т. Д.). Также есть C++-faq от Marshall Cline (различные авторы).

Люди также, похоже, забывают, что StackOverflow - это ресурс. Люди потратили сотни часов, внося свой вклад в , и даже просто сортировка вопросов С ++ на votes дает много высококачественного контента для прохождения. Если не хватает, соберите страницу user по репутации и найдите пользователей, которые являются экспертами на 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 необходимо внутри основной. Затем у вас есть массив неизвестных границ. В этом контексте это запрещено. Просто начните с 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). Пожалуйста, см. Why is iostream::eof inside a loop condition considered wrong? для более подробного объяснения.

Теперь вы хотите напечатать целые числа в обратном порядке. У вас есть три способа сделать это:

std::sort(v.rbegin(), v.rend()); 
std::reverse(v.begin(), v.end()); // #include <algorithm> 

Затем пропустите и распечатайте каждый элемент. Или используйте цикл, который выполняет итерацию через вектор назад при печати каждого элемента. Два вышеуказанных метода практически эквивалентны, но я включил rbegin(), потому что он возвращает обратный итератор, демонстрируя, что вам не нужно иметь дело с голым итератором.

Я не буду беспокоиться о том, чтобы предоставить более подробные объяснения, потому что утром 3:30, но, надеюсь, это поможет вам начать. Удачи.

Смежные вопросы