В C++ существует специальный контейнер для хранения последовательности переменных одного типа данных. Такой контейнер называется vector.
Удобно представить себе vector как набор из nn «коробочек», каждая может хранить переменную указанного типа данных. Все «коробочки» пронумерованы от 0 до n−1.
Рассмотрим работу с вектором на примере задачи.
Задача
Дана последовательность из n чисел. Выведите её в обратном порядке.
Решение
#include <iostream>
#include <vector> // Библиотека для работы с векторами
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(n); // создаём вектор из n чисел
for (int i = 0; i < n; ++i){
cin >> v[i]; // считываем i-й элемент вектора
}
for (int i = n - 1; i >= 0; --i){ // цикл от n - 1 до 0
cout << v[i] << " "; // выводим i-й элемент вектора
}
return 0;
}
Данную задачу можно решить иначе. Переставим элементы в векторе v так, чтобы они шли в обратном порядке.
Решение 2
Поменяем v0 с vn−1, v1 с vn−2 и так далее до середины вектора.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; ++i){
cin >> v[i];
}
for (int i = 0; i < n / 2; ++i){
int temp = v[i];
v[i] = v[n - 1 - i];
v[n - 1 - i] = temp;
}
for (int i = 0; i < n; ++i){
cout << v[i] << " ";
}
return 0;
}
У вектора есть специальный метод push_back. Данный метод позволяет добавить элемент в конец вектора. Также у вектора существует специальный метод size(), с помощью которого можно узнать размер вектора. Рассмотрим применение данных методов на примере задачи.
Задача
Дана последовательность из n чисел. Разделите её на две последовательности: в первой храните все неотрицательные числа из исходной последовательности, а во второй — все отрицательные. Выведите полученные последовательности на экран, каждую на отдельной строке.
Решение
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> pos, neg; // создаём два пустых вектора pos и neg
for (int i = 0; i < n; ++i)
{
int now;
cin >> now; // считываем элементы исходной последовательности
if (now >= 0){
pos.push_back(now); // неотрицательное число добавляем в конец вектора pos
} else {
neg.push_back(now); // отрицательное число добавляем в конец вектора neg
}
}
for (int i = 0; i < pos.size(); ++i) { // идём циклом по всем элементам вектора pos
cout << pos[i] << " ";
}
cout << endl;
for (int i = 0; i < neg.size(); ++i) { // идём циклом по всем элементам вектора neg
cout << neg[i] << " ";
}
return 0;
}