Вы можете сделать следующее:
Опция - 1
Использовать на основе диапазона для петли как для ввода, так и для печати (обычно)элемент вектора.И используя std :: for_each вместе с константным обратным итератором и лямбда , выведите в обратном порядке элементы вектора.
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
int n; std::cin >> n;
std::vector<int> myvector(n);
for (int& element : myvector) std::cin >> element;
for (const int element : myvector) std::cout << element << " "; std::cout << std::endl;
std::for_each(myvector.crbegin(), myvector.crend(), [](const int element) { std::cout << element << " "; }); //prints reversed vector
return 0;
}
Опция - 2
Другой, полный итераторный способ - использовать std ::istream_iterator и std :: ostream_iterator , а также функции алгоритма std :: copy и std :: copy_n .
#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>
int main()
{
int n; std::cin >> n;
std::vector<int> myvector; myvector.reserve(n);
std::copy_n(std::istream_iterator<int>(std::cin), n, std::back_inserter(myvector));
std::copy(myvector.cbegin(), myvector.cend(), std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl;
std::for_each(myvector.crbegin(), myvector.crend(), [](int element){ std::cout << element << " ";}); //prints reversed vector
return 0;
}
Опция - 3 ( Обновление )
После просмотра редактирования/ update в вашем вопросе я понимаю, что вы пытаетесь напечатать элементы, используя традиционный iterator-for-loop .Если это так, вам не нужен дополнительный массив int a[40];
.Вместо этого выделите и инициализируйте вектор g1
размером n
и введите элементы с помощью итератора следующим образом:
#include <iostream>
#include <vector>
int main()
{
int n; std::cin >> n;
std::vector<int> g1(n); // change here
for (auto iter = g1.begin(); iter != g1.end(); ++iter) std::cin >> *iter; // change here
for (auto iter = g1.cbegin(); iter != g1.cend(); ++iter) std::cout << *iter << " "; std::cout << "\n";
for (auto iter = g1.crbegin(); iter != g1.crend(); ++iter) std::cout << *iter << " ";
return 0;
}
Примечания:
Не практикуйте кодирование с using namespace std;
, ( см. Причину здесь. )
Старайтесь максимально избегать использования глобальных переменных.В вашем случае определенно нет необходимости.