Рабочий стол > DL Руководство пользователя > ... > Полезные факты о С++ и примеры задач > Вектор > Просмотр
Вектор Войти | Зарегистрироваться   Просмотр версии для печати текущей страницы.

Добавлено Egor, последний раз изменено Egor Oct 09, 2016  (просмотр изменений)
Метки: 
(нет)

Вектор - это динамический массив (размеры могут изменяться во время выполнения)

Вектор полезен для параллельной сортировки нескольких массивов

Например, сортировка с номерами
(вектор неограниченной длины, пары добавляем в конец вектора)

part.cpp
vector<pair<int, int> > v;
  int n,i;
  cin >> n;
  int h[n];
  for(i = 0; i < n; i++)
    {
      cin >> h[i] ;
      v.push_back(make_pair(h[i],i));
    }
  sort(v.begin(), v.end());

или сортировка пар
вектор фиксированной после ввода длины, пары добавляем по номеру

part.cpp
int N, D;
  cin >> N >> D;

  vector<pair<int, int> > A(N);
  for(int i = 0; i < N; i++)
    cin >> A[i].first >> A[i].second;

  sort(A.begin(), A.end());

Массив пар сортируется по возрастанию первого числа
а в случае равенства первого - по возрастанию второго
В случае, когда гарантируется, что все первые различны
второй массив просто параллельно передвигается,
фактически никогда не участвуя в сравнениях

В вектор можно запихнуть и четвёрки чисел,
а потом отсортировать параллельно 4 массива:

part.cpp
vector<pair< pair<int,int> , pair<int,int> > > v;


  int N,i,x1,y1,x2,y2;

  cin >> N ;
  for (i=0; i<N; i++)
    {
      cin >> x1 >> y1 >> x2 >> y2 ;
      v.push_back(make_pair(make_pair(x1,y1),make_pair(x2,y2)));
    }
  sort(v.begin(),v.end());

v.size() - размер вектора (количество элементов в векторе)

Для обращения
к первому элементу вектора используем суффикс .first
ко второму - .second
первый элемент первой пары вектора v[i]
v[i].first.first

цикл обработки вектора из двух пар (четвёрки чисел)

part.cpp
for (int i=0; i<v.size(); i++)
      {
        int x1,y1,x2,y2;
        x1=v[i].first.first;
        y1=v[i].first.second;
        x2=v[i].second.first;
        y2=v[i].second.second;
        if (x0>x1 && x0<x2 && y0>y1 && y0<y2) return true;
      }

binary_search(v.begin(),v.end(),i) - двоичный поиск числа i в векторе v;

primer.cpp
#include <bits/stdc++.h>
using namespace std;

int main()
{
 vector<int> a;          // создали пустой вектор типа int
 a.reserve(10);          // зарезервировали память под 10 элементов типа int

 vector<int> b(10);      // создали пустой вектор типа int
                         // зарезервировали память под 10 элементов типа int
                         // прописали их нулями
 for(unsigned int i=0; i<b.size(); i++)   // обработка вектора по его размеру
   cout << b[i] << ' ';

 vector<int> c(b);       // копирование вектора (c=b)
 for(unsigned int i=0; i<c.size(); i++)   // обработка вектора по его размеру
   cout << c[i] << ' ';

 if (c == b) cout << "c=b" << endl;  // проверка векторов на равенство
}



Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами