| Вектор - это динамический массив (размеры могут изменяться во время выполнения) |
| |
| Вектор полезен для параллельной сортировки нескольких массивов |
| |
| Например, сортировка с номерами |
| (вектор неограниченной длины, пары добавляем в конец вектора) |
| {code:title=part.cpp|borderStyle=solid} |
| 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()); |
| {code} |
| или сортировка пар |
| вектор фиксированной после ввода длины, пары добавляем по номеру |
| {code:title=part.cpp|borderStyle=solid} |
| 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()); |
| {code} |
| Массив пар сортируется по возрастанию первого числа |
| а в случае равенства первого - по возрастанию второго |
| В случае, когда гарантируется, что все первые различны |
| второй массив просто параллельно передвигается, |
| фактически никогда не участвуя в сравнениях |
| |
| В вектор можно запихнуть и четвёрки чисел, |
| а потом отсортировать параллельно 4 массива: |
| {code:title=part.cpp|borderStyle=solid} |
| 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() - размер вектора (количество элементов в векторе) |
| {code} |
| Для обращения |
| к первому элементу вектора используем суффикс .first |
| ко второму - .second |
| первый элемент первой пары вектора v\[i\] |
| v\[i\].first.first |
| |
| цикл обработки вектора из двух пар (четвёрки чисел) |
| {code:title=part.cpp|borderStyle=solid} |
| 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; |
| } |
| {code} |
| | binary_search(v.begin(),v.end(),i) - двоичный поиск числа i в векторе v;\\ |
| | binary_search(v.begin(),v.end(),i) - двоичный поиск числа i в векторе v; |
| \\ |
| {code:title=primer.cpp|borderStyle=solid} |
| #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; // проверка векторов на равенство |
| } |
| {code}\\ |
| \\ |
| | \\ |