| | Вектор - это динамический массив (размеры могут изменяться во время выполнения) |
| | |
| | Вектор полезен для параллельной сортировки нескольких массивов |
| | |
| | Например, сортировка с номерами |
| | (вектор неограниченной длины, пары добавляем в конец вектора) |
| | {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}\\ |
| | \\ |
 | | \\ |