- size/length:
int n = vec.size();
- max:
int max = *max_element(vec.begin(), vec.end());
- initiate:
vector<int> vec(size, default_val); or vector<int> vec(size);
- iteration:
a. itereate by index:
for(int i = 0; i < vec.size(); ++i) {
// ++i better than i++ as i++ will
// cost temp to store i first then +1;
cout << vec[i];
}
b. iterate by pointer:
for(vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
cout << *it;
}
c. iterate by item:
for(auto/int v: vec) {
cout << v;
}
d. iterate by item (pass by reference):
the above c. method is pass by value, each item is copied to v. Quite slow & costly. -> pass by refernece is much faster
use const if uneditable, remove to edit as well.
for(const auto& v: vec) {
cout << v;
}
- sum:
new_sum = accumulate(vec.begin(), vec.end(), sum_ini); (sum in order) reduce(nums.begin(), nums.end()); (parallel sum, faster)
- delete:
vec.erase(vec.begin()+i);
- reverse:
reverse(vec.begin(), vec.end());
- a good fun to avoid bound condition:
auto get = [&](int i) -> pair<int, int> {
if (i == -1 || i == n) {
return {0, 0};
}
return {1, nums[i]};
};
To compare use get(a) < get(b) even for the i=-1/n condition!(treat as -INF);
- good method to customize sort:
sort(intervals.begin(), intervals.end(),
[ ](const auto& u, const auto&v){
return u[0] < v[0];
});
C++20 sort:
std::ranges::sort(people, [](const Person& a, const Person& b) { return a.age < b.age; });
- customize size:
vector<vector<int>> mat(n, vector<int>(m));
- remove duplicate:
sort(ans.begin(), ans.end());
auto last = unique(ans.begin(), ans.end());
ans.erase(last, ans.end());
- compare two vectors:
== compare ele by ele
- sort by nth ele:
nth_element(v.begin(), v.begin() + k, v.end());, first k ele is in the front(random pos), last size-n is in the back. O(n) only, effective.
- find ele:
find(vec.begin(), vec.end(), ele)
- get max ele:
*max_element(maxF.begin(), maxF.end());
- transfer data type*eg: int to double
vector<double> D(vec.begin(), vec.end());