Module ā§Ļ ¡ STL āĻāĻŋāύāĻŋāϏāĻāĻž āĻā§, āĻāϰ āĻāĻāĻž C++ āϞā§āĻāĻžāϰ āϧāϰāύāĻāĻžāĻ āĻĒāĻžāϞā§āĻā§ āĻĻā§āϝāĻŧ āĻā§āύ
cppreference āĻĒāĻĄāĻŧāĻŦ āĻā§āĻāĻžāĻŦā§, āĻāϰ O(log n) āĻŽāĻžāύ⧠āĻāϏāϞ⧠āĻā§ promise
āĻāĻ lesson-āĻ āϝāĻž āĻļāĻŋāĻāĻŦā§
- āĻāĻāĻāĻž cppreference page-āĻ āϝ⧠āĻāĻžāϰāĻāĻž āĻāĻŋāύāĻŋāϏ āĻāϏāϞ, āϏā§āĻā§āϞ⧠āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§: signature, parameter, complexity āĻāϰ iterator invalidation-āĻāϰ noteāĨ¤
- āĻāĻāĻāĻž complexity āϞāĻžāĻāύāĻā§ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰāĻŦā§, "amortised" āĻŽāĻžāύ⧠āĻā§ āϏā§āĻāĻž āϏāĻšāĨ¤
- "since C++20" āĻāĻŋāĻšā§āύāĻāĻž Playground-āĻ āĻāĻžāϞāĻžāύ⧠code-āĻāϰ āĻāύā§āϝ āĻā§ āĻŦā§āĻāĻžāϝāĻŧ, āϏā§āĻāĻž āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
David std::vector āύāĻŋāϝāĻŧā§ āĻĒāĻĄāĻŧāĻā§āĨ¤ push_back-āĻāϰ āĻĒāĻžāĻļā§ reference āĻŦāϞāĻā§ "constant, amortised"āĨ¤ āĻāϰ insert-āĻāϰ āĻĒāĻžāĻļā§ āĻŦāϞāĻā§, āĻāϰāĻāĻāĻž āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ āĻĻā§āϰāϤā§āĻŦā§āϰ āϏāĻā§āĻā§ linearāĨ¤ āϏ⧠āϏāĻŦāĻā§āϝāĻŧā§ āϏā§āĻāĻž āĻĒā§āϰāĻļā§āύāĻāĻžāĻ āĻāϰā§: "āϤāĻžāĻšāϞ⧠āĻā§āĻ insert āϞāĻŋāĻāĻŦā§ āĻā§āύ?"
āĻĒā§āϰāĻļā§āύāĻāĻž āĻāĻžāϞā§, āĻāϰ āĻāϤā§āϤāϰāĻāĻž āĻāĻ āĻāĻāĻ page-āĻāĻ āĻāĻā§, āϝāĻĻāĻŋ āĻāĻžāύ⧠āĻā§āĻĨāĻžāϝāĻŧ āϤāĻžāĻāĻžāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻ lesson āϤā§āĻŽāĻžāĻā§ āĻāĻ page āĻĒāĻĄāĻŧāϤ⧠āĻļā§āĻāĻžāĻŦā§āĨ¤ āĻāϰāĻĒāϰ āĻāĻ track-āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž āĻāϰāĻ āϤā§āĻŽāĻŋ āύāĻŋāĻā§āĻ āϝāĻžāĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§, āĻā§āĻ āĻŦā§āĻā§ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻāϰāϤ⧠āĻšāĻŦā§ āύāĻžāĨ¤
āϝ⧠reference āĻĒā§āϰāϤāĻŋāĻāĻž C++ programmer āĻā§āϞ⧠āϰāĻžāĻā§
STL-āĻāϰ āĻŦāϰā§āĻŖāύāĻž āĻāĻā§ āĻĻā§āĻāĻāĻž document-āĻāĨ¤ āĻĒā§āϰāĻĨāĻŽāĻāĻž C++ standard āύāĻŋāĻā§, āϏā§āĻ official ISO document, āϝā§āĻāĻž āĻĒā§āϰāϤāĻŋāĻāĻž compiler āĻŽā§āύ⧠āĻāϞā§āĨ¤ āĻāĻāĻž āύāĻŋāĻā§āĻāϤ āĻāϰ āϞāĻŽā§āĻŦāĻž, āĻāϰ āĻĒā§āϰāĻāĻžāĻļāĻŋāϤ version āĻāĻŋāύāϤ⧠āĻāĻžāĻāĻž āϞāĻžāĻā§āĨ¤ Committee-āϰ working draft-āĻā§āϞ⧠āĻĢā§āϰāĻŋ, āĻāϰ āĻŽāĻžāύā§āώ āĻāĻā§āϞā§āĻ āĻĒāĻĄāĻŧā§: N4659 āĻšāϞ⧠C++17-āĻāϰ āĻļā§āώ draft, N4861 āĻšāϞ⧠C++20-āĻāϰ, āĻāϰ eel.is/c++draft āĻāĻāύāĻāĻžāϰāĻāĻž web page āĻšāĻŋāϏā§āĻŦā§ āĻĻā§āĻāĻžāϝāĻŧāĨ¤
āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧāĻāĻž cppreference.com, standard āĻĨā§āĻā§ volunteer-āĻĻā§āϰ āϞā§āĻāĻž āĻāĻāĻāĻž āĻĢā§āϰāĻŋ referenceāĨ¤ āĻāϤ⧠āĻĒā§āϰāϤāĻŋāĻāĻž function-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻž āĻāϰ⧠page, example āϏāĻš, āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž standard-āĻ āĻā§ āĻŦāĻĻāϞā§āĻā§ āϏā§āĻāĻž āĻāĻŋāĻšā§āύ āĻĻāĻŋāϝāĻŧā§ āĻĻā§āĻāĻžāύā§āĨ¤ āĻāĻžāĻ āĻāϰāĻž C++ programmer-āϰāĻž āĻāĻ page-āĻāĻžāĻ āĻā§āϞ⧠āϰāĻžāĻā§āĨ¤ āϰā§āĻāĻāĻžāϰ āĻāĻžāĻā§ cppreference āĻĒāĻĄāĻŧā§, āĻāϰ āĻšā§āĻŦāĻšā§ āĻļāĻŦā§āĻĻāĻā§āϞ⧠āĻĻāϰāĻāĻžāϰ āĻšāϞ⧠draft-āĻ āϝāĻžāĻāĨ¤
āĻāĻāĻāĻž reference page-āĻāϰ āĻāĻ āύ
std::vector<T>::insert-āĻāϰ page-āĻāĻž āĻā§āϞā§āĨ¤ āĻĻā§āĻāϤ⧠āĻ āĻžāϏāĻž āϞāĻžāĻā§, āĻāĻŋāύā§āϤ⧠āĻāϤ⧠āϏāĻŦ āϏāĻŽāϝāĻŧ āĻāĻāĻ āĻ
āĻāĻļ āĻāĻāĻ āĻā§āϰāĻŽā§ āĻĨāĻžāĻā§, āĻāϰ āĻāĻĻā§āϰ āĻāĻžāϰāĻāĻžāϤā§āĻ āϤā§āĻŽāĻžāϰ āĻĻāϰāĻāĻžāϰāĻŋ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦāĻāĻŋāĻā§ āĻāĻā§āĨ¤
1. SignatureāĨ¤ āĻāĻā§āϞ⧠āĻšāϞ⧠declaration: function-āĻāĻž call āĻāϰāĻžāϰ āϏāĻŦāĻā§āϞ⧠āĻāĻĒāĻžāϝāĻŧāĨ¤ insert-āĻāϰ āĻāϝāĻŧā§āĻāĻāĻž āĻāĻā§, (1), (2) āĻāĻāĻžāĻŦā§ āύāĻŽā§āĻŦāϰ āĻĻā§āĻāϝāĻŧāĻž, āĻāϰ page-āĻāϰ āĻŦāĻžāĻāĻŋāĻāĻž āĻāĻĻā§āϰ āύāĻŽā§āĻŦāϰ āϧāϰā§āĻ āĻāĻĨāĻž āĻŦāϞā§āĨ¤ āĻāĻ āĻšāϞ⧠āĻāϰ C++17-āĻāϰ form-āĻā§āϞā§:
iterator insert( const_iterator pos, const T& value ); (1)
iterator insert( const_iterator pos, T&& value ); (2)
iterator insert( const_iterator pos, size_type count, const T& value ); (3)
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last ); (4)
iterator insert( const_iterator pos, std::initializer_list<T> ilist ); (5)
āĻĒā§āϰāϤāĻŋāĻāĻž āĻā§ āύā§āϝāĻŧ āĻāϰ āĻā§ āĻĢā§āϰāϤ āĻĻā§āϝāĻŧ, āϏā§āĻāĻž āĻĻā§āĻā§ āĻĒāĻĄāĻŧā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž form pos āύā§āϝāĻŧ, āĻāĻāĻāĻž iterator, āϝā§āĻāĻž āĻŦāϞ⧠āĻā§āĻĨāĻžāϝāĻŧ āĻĸā§āĻāĻžāϤ⧠āĻšāĻŦā§, āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž form āĻāĻāĻāĻž iterator āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤ Form (3) āĻāĻāĻāĻž āĻŽāĻžāύā§āϰ count-āĻāĻž āĻāĻĒāĻŋ āĻĸā§āĻāĻžāϝāĻŧāĨ¤
2. ParameterāĨ¤ Signature-āĻ āϝāϤ āύāĻžāĻŽ āĻāĻā§, āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āĻāύā§āϝ āĻāĻ āϞāĻžāĻāύāĨ¤ āĻāĻāĻžāύā§āĻ āĻāĻžāύāĻŦā§ āϝ⧠āύāϤā§āύ element-āĻā§āϞ⧠āĻŦāϏ⧠pos-āĻāϰ āĻāĻā§, āĻāϰ āĻāĻāĻž āĻā§āϞ āĻāύā§āĻĻāĻžāĻ āĻāϰāĻž āĻā§āĻŦ āϏāĻšāĻāĨ¤
3. ComplexityāĨ¤ āĻāϰāĻ, āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻšāĻŋāϏā§āĻŦā§ āϞā§āĻāĻžāĨ¤ Form (1)-āĻāϰ āĻāύā§āϝ āĻāĻāĻž constant, āϏāĻā§āĻā§ pos āĻĨā§āĻā§ āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ āĻĻā§āϰāϤā§āĻŦā§āϰ linearāĨ¤ āϏā§āĻāĻž āĻāĻĨāĻžāϝāĻŧ, āĻĸā§āĻāĻžāύā§āϰ āĻāĻžāϝāĻŧāĻāĻžāϰ āĻĒāϰā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻž element-āĻā§ āĻāĻžāϝāĻŧāĻāĻž āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻāĻ āĻāϰ āĻāϰ⧠āϏāϰāϤ⧠āĻšāϝāĻŧāĨ¤
4. Iterator invalidationāĨ¤ āĻāĻĒāϰā§āϰ āĻĻāĻŋāĻā§ āĻā§āĻ āĻāĻāĻāĻž āĻ
āύā§āĻā§āĻā§āĻĻ āĻŦāϞā§, āĻĒā§āϰāύ⧠āĻā§āύ iterator-āĻā§āϞ⧠āĻĒāϰā§āĻ āĻāĻžāĻ āĻāϰā§āĨ¤ insert-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧ: vector-āĻā§ āϝāĻĻāĻŋ āĻŦāĻĄāĻŧ āĻšāϤ⧠āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻāϰ āĻā§āϤāϰā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻž iterator āĻāĻāύ āĻ
āĻāϞāĨ¤ āύāĻāϞ⧠āĻ
āĻāϞ āĻšāϝāĻŧ āĻļā§āϧ⧠āĻĸā§āĻāĻžāύā§āϰ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻāϰ āϤāĻžāϰ āĻĒāϰ⧠āĻĨāĻžāĻāĻž iterator-āĻā§āϞā§āĨ¤ āĻāĻ āϧāĻžāϰāĻŖāĻžāϰ āϏāĻā§āĻā§ āĻĻā§āĻāĻž āĻšāϝāĻŧā§āĻā§ Lesson 4-āĻāϰ āĻĒā§āϰāĻļā§āύāĻā§āϞā§āϤā§, āĻāϰ Module 11 āĻāĻāĻžāĻā§ āĻāϞāύā§āϤ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĻā§āĻāĻžāĻŦā§āĨ¤
āϤāĻžāĻšāϞ⧠David-āĻāϰ āĻāϤā§āϤāϰ page-āĻāĻ āĻāĻā§āĨ¤ insert āĻāĻā§, āĻāĻžāϰāĻŖ āĻāĻāύ⧠āĻāĻāύ⧠āĻŽāĻžāĻāĻāĻžāύ⧠āĻāĻāĻāĻž element āϞāĻžāĻā§āĻ, āĻāϰ complexity āϞāĻžāĻāύāĻāĻž āĻ āĻŋāĻ āĻŦāϞ⧠āĻĻā§āϝāĻŧ āϤāĻžāϰ āĻāϰāĻ āĻāϤāĨ¤
āĻāĻāĻŽāĻžāϤā§āϰ āĻĒāĻĄāĻŧāĻž āĻāĻāĻāĻž signature call āĻāϰāĻž
auto it = v.insert(v.begin() + 1, 15);
v.insert: function-āĻāĻž, vector-āĻāϰ āĻāĻāĻāĻž memberāĨ¤v.begin() + 1:posparameter, āĻāĻāĻāĻž iteratorāĨ¤ āύāϤā§āύ element āĻŦāϏāĻŦā§ 1 āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻžāϰ element-āĻāϰ āĻāĻā§āĨ¤15:valueparameterāĨ¤ āĻāĻ call form (1) āĻŦāĻž (2)-āĻāϰ āϏāĻā§āĻā§ āĻŽā§āϞā§āĨ¤auto it =: return value, āĻāĻāĻāĻž iterator, āϝā§āĻāĻž āύāϤā§āύ element-āĻ āĻāĻā§āϞ āϰāĻžāĻā§āĨ¤
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {10, 20, 30};
auto it = v.insert(v.begin() + 1, 15);
std::cout << "inserted " << *it << ", now:";
for (int x : v) std::cout << ' ' << x;
std::cout << '\n';
v.insert(v.end(), 3, 99);
std::cout << "three 99s at the end:";
for (int x : v) std::cout << ' ' << x;
std::cout << '\n';
}
inserted 15, now: 10 15 20 30
three 99s at the end: 10 15 20 30 99 99 99
āĻĒā§āϰāĻĨāĻŽ call-āĻāĻž form (1): āĻāĻāĻāĻž āĻŽāĻžāύ, 1 āύāĻŽā§āĻŦāϰ āĻāĻžāϝāĻŧāĻāĻžāϰ āĻāĻā§āĨ¤ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧāĻāĻž form (3): āĻāĻāĻāĻž āϏāĻāĻā§āϝāĻž āĻāϰ āĻāĻāĻāĻž āĻŽāĻžāύ, end()-āĻāϰ āĻāĻā§, āĻŽāĻžāύ⧠"āĻļā§āώā§"āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž call āĻāϏāϞ⧠page-āĻāϰ signature, āĻļā§āϧ⧠āϏāϤā§āϝāĻŋāĻāĻžāϰā§āϰ argument āĻŦāϏāĻžāύā§āĨ¤
Complexity-āϰ āĻļāĻŦā§āĻĻāĻā§āϞā§
Reference page āĻāϰāĻ āĻŦā§āĻāĻžāϝāĻŧ āĻ āϞā§āĻĒ āĻāϝāĻŧā§āĻāĻāĻž āĻŦāĻžāĻāϧāĻž āĻļāĻŦā§āĻĻā§āĨ¤ Lesson 3 āϤā§āĻŽāĻžāĻā§ āĻāϰ āϤāĻŋāύāĻāĻž āĻĻāĻŋāϝāĻŧā§āĻā§āĨ¤ āĻāĻ track-āĻ āϝāϤāĻā§āϞā§āϰ āĻĻā§āĻāĻž āĻĒāĻžāĻŦā§, āĻĒā§āϰ⧠set-āĻāĻž āύāĻŋāĻā§ āĻāĻā§, āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āĻĒāĻžāĻļā§ āĻāĻŽāύ āĻāĻāĻāĻž āϏāϤā§āϝāĻŋāĻāĻžāϰā§āϰ operation, āϝāĻžāϰ āĻāϰāĻ āĻ āĻŋāĻ āĻāĻāĻžāĻāĨ¤
| Page-āĻ āϞā§āĻāĻž āĻĨāĻžāĻā§ | Big-O | āϏā§āĻāĻž āĻāĻĨāĻžāϝāĻŧ | āĻāĻ āĻāϰāĻā§āϰ āĻāĻāĻāĻž operation |
|---|---|---|---|
| Constant | O(1) | n-āĻāϰ āϏāĻā§āĻā§ āĻŦāĻžāĻĄāĻŧā§ āύāĻž | vector-āĻ v[i] |
| Logarithmic | O(log n) | n āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻšāϞ⧠āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻāĻ āϧāĻžāĻĒ āĻŦāĻžāĻĄāĻŧā§ | set-āĻ s.find(x) |
| Linear | O(n) | āĻĻāĻļ āĻā§āĻŖ n, āĻĻāĻļ āĻā§āĻŖ āĻāĻžāĻ | āĻāĻāĻāĻž range-āĻ std::find |
| Linearithmic, āĻŦāĻž N log N | O(n log n) | linear-āĻāϰ āĻā§āϝāĻŧā§ āĻāĻāĻā§ āĻŦā§āĻļāĻŋ | std::sort |
| Amortised constant | āĻāĻĄāĻŧā§ O(1) | āĻ āύā§āĻāĻŦāĻžāϰ call āĻāϰāϞ⧠āĻāĻĄāĻŧā§ constant | v.push_back(x) |
āĻļā§āώ āϏāĻžāϰāĻŋāĻāĻž āĻāĻāĻā§ āĻāĻžāĻ āĻĨā§āĻā§ āĻĻā§āĻāĻž āĻĻāϰāĻāĻžāϰ, āĻāĻžāϰāĻŖ David āĻ āĻŋāĻ āĻāĻāĻž āύāĻŋāϝāĻŧā§āĻ āĻĒā§āϰāĻļā§āύ āĻāϰā§āĻāĻŋāϞāĨ¤ Amortised āĻŽāĻžāύ⧠"āĻ
āύā§āĻāĻŦāĻžāϰ call āĻāϰāϞ⧠āĻāĻĄāĻŧā§"āĨ¤ push_back-āĻāϰ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ call āĻāĻ āϧāĻžāĻĒā§āϰāĨ¤ āĻŽāĻžāĻā§ āĻŽāĻžāĻā§ vector āĻāϰ⧠āϝāĻžāϝāĻŧ, āϤāĻāύ āϏ⧠memory-āϰ āĻāĻāĻāĻž āĻŦāĻĄāĻŧ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āϏāϰ⧠āϝāĻžāϝāĻŧ āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻž element āĻāĻĒāĻŋ āĻāϰā§āĨ¤ āĻāĻ āĻāĻāĻāĻž call āϧā§āϰāĨ¤ āĻāĻŋāύā§āϤ⧠capacity āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāϝāĻŧā§āĻ āĻā§āĻŖ āĻāϰ⧠āĻŦāĻžāĻĄāĻŧā§, āϤāĻžāĻ āϧā§āϰ call-āĻā§āϞ⧠āĻāϤ āĻāĻŽ āĻāϏ⧠āϝ⧠āĻāĻĄāĻŧāĻāĻž constant-āĻ āĻĨāĻžāĻā§āĨ¤
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v;
std::size_t last = v.capacity();
std::cout << "capacity changes:";
for (int i = 1; i <= 100; i++) {
v.push_back(i);
if (v.capacity() != last) {
last = v.capacity();
std::cout << ' ' << last;
}
}
std::cout << '\n';
}
capacity changes: 1 2 4 8 16 32 64 128
capacity() āĻŦāϞā§, vector-āĻā§ āϏāϰāϤ⧠āĻšāĻāϝāĻŧāĻžāϰ āĻāĻā§ āĻāϝāĻŧāĻāĻž element āϧāϰāĻŦā§āĨ¤ 100 āĻŦāĻžāϰ push āĻāϰāϤ⧠āĻāĻŋāϝāĻŧā§ āĻāĻāĻž memory-āϰ āύāϤā§āύ āĻāĻžāϝāĻŧāĻāĻž āύāĻŋāϝāĻŧā§āĻā§ āĻŽāĻžāϤā§āϰ 8 āĻŦāĻžāϰ, āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻšāϝāĻŧā§āĨ¤ āϏāϰāĻžāύā§āϰ āϏāĻŽāϝāĻŧ āĻŽā§āĻ āĻāĻĒāĻŋ āĻšāϝāĻŧā§āĻā§ 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127āĻāĻž element, āĻĒā§āϰāϤāĻŋ push-āĻ āĻĻā§āĻāĻāĻžāϰāĻ āĻāĻŽāĨ¤ āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻāϰāĻžāĻāĻž GCC-āϰ āύāĻŋāĻā§āϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ; standard āĻļā§āϧ⧠āĻāĻĄāĻŧā§āϰ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĻā§āϝāĻŧāĨ¤
āĻŽā§āĻĒā§ āĻĻā§āĻā§ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āϝāĻžāĻāĻžāĻ
Complexity āϞāĻžāĻāύ āĻšāϞ⧠āĻŦā§āĻĻā§āϧāĻŋ āύāĻŋāϝāĻŧā§ āĻāĻāĻāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ, āϏā§āĻā§āύā§āĻĄā§ āĻŽāĻžāĻĒāĻž āĻā§āύ⧠āϏāĻŽāϝāĻŧ āύāĻžāĨ¤ āϤāĻžāĻ āϏ⧠āĻĒāϰā§āĻā§āώāĻž āĻšāϞ⧠n āĻŦāĻžāĻĄāĻŧāĻžāύ⧠āĻāϰ āϤāĻžāĻāĻŋāϝāĻŧā§ āĻĻā§āĻāĻžāĨ¤ āĻāĻ program n-āĻāĻž āϏāĻāĻā§āϝāĻžāϰ āĻāĻāĻāĻž vector āĻĻā§āĻāĻŦāĻžāϰ āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ āĻĒā§āϰāĻĨāĻŽā§ push_back āĻĻāĻŋāϝāĻŧā§, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻž amortised constantāĨ¤ āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāϤāĻŋāĻāĻž āϏāĻāĻā§āϝāĻž āϏāĻžāĻŽāύ⧠insert āĻāϰā§, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻž linear, āϤāĻžāĻ āĻĒā§āϰ⧠āĻāĻžāĻāĻāĻž āĻŦāĻžāĻĄāĻŧā§ n-āĻāϰ āĻŦāϰā§āĻā§āϰ āĻŽāϤā§āĨ¤
#include <chrono>
#include <iostream>
#include <vector>
using namespace std::chrono;
int main()
{
for (int n : {1000, 10000, 100000}) {
auto t0 = steady_clock::now();
std::vector<int> back;
for (int i = 0; i < n; i++) back.push_back(i);
auto t1 = steady_clock::now();
std::vector<int> front;
for (int i = 0; i < n; i++) front.insert(front.begin(), i);
auto t2 = steady_clock::now();
std::cout << "n = " << n << ": push_back " << duration_cast<microseconds>(t1 - t0).count()
<< " us, insert at front " << duration_cast<microseconds>(t2 - t1).count() << " us\n";
}
}
n = 1000: push_back 7 us, insert at front 25 us
n = 10000: push_back 56 us, insert at front 1943 us
n = 100000: push_back 472 us, insert at front 308680 us
āĻāĻ āϏāĻāĻā§āϝāĻžāĻā§āϞ⧠āĻāĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāύā§āϰ (one run) āĻĢāϞ, Compiler Explorer-āĻāϰ GCC 12.2-āĻ, runner-āĻāϰ flag āĻĻāĻŋāϝāĻŧā§, g++ -O2 -std=c++17, 2026-10-07 āϤāĻžāϰāĻŋāĻā§āĨ¤ Playground-āĻ āϤā§āĻŽāĻŋ āĻāĻžāϞāĻžāϞ⧠āĻ
āύā§āϝ āϏāĻāĻā§āϝāĻž āĻāϏāĻŦā§, āĻāĻžāϰāĻŖ āĻŽā§āĻļāĻŋāύ āĻāϞāĻžāĻĻāĻžāĨ¤ āĻāĻŋāύā§āϤ⧠āĻāĻĄāĻŧāύāĻāĻž āĻāĻāĻ āĻĨāĻžāĻāĻŦā§āĨ¤ us āĻŽāĻžāύ⧠microsecond, āĻāĻ āϏā§āĻā§āύā§āĻĄā§āϰ āĻĻāĻļ āϞāĻžāĻ āĻāĻžāĻā§āϰ āĻāĻ āĻāĻžāĻāĨ¤
Chart-āĻāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋāϰ āϏāĻā§āĻā§ āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āĻĒāĻĄāĻŧā§āĨ¤ Element āĻĻāĻļ āĻā§āĻŖ āĻšāĻāϝāĻŧāĻžāϝāĻŧ push_back āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ 8 āĻĨā§āĻā§ 10 āĻā§āĻŖ āϧā§āϰ āĻšāϝāĻŧā§āĻā§: āĻŽā§āĻā§āϰ āĻāĻĒāϰ linear, āĻĒā§āϰāϤāĻŋ call-āĻ constantāĨ¤ āϏāĻžāĻŽāύ⧠insert āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ 78 āĻā§āĻŖ āϧā§āϰ āĻšāϝāĻŧā§āĻā§, āϤāĻžāϰāĻĒāϰ 159 āĻā§āĻŖ: āĻĒā§āϰāϤāĻŋāĻāĻž insert linear, āϤāĻžāĻ āĻĒā§āϰ⧠āĻāĻžāĻāĻāĻž n-āĻāϰ āĻŦāϰā§āĻā§āϰ āĻŽāϤ⧠āĻŦāĻžāĻĄāĻŧā§āĨ¤ 100,000 element-āĻ āĻāĻāĻž push_back-āĻāϰ āĻā§āϝāĻŧā§ āĻĒā§āϰāĻžāϝāĻŧ 650 āĻā§āĻŖ āĻŦā§āĻļāĻŋ āϏāĻŽāϝāĻŧ āύāĻŋāϝāĻŧā§āĻā§āĨ¤ Program-āĻ n āĻāĻžāĻĄāĻŧāĻž āĻāĻŋāĻā§āĻ āĻŦāĻĻāϞāĻžāϝāĻŧāύāĻŋ, āĻāϰ page āϤā§āĻŽāĻžāĻā§ āĻāĻā§āĻ āĻŦāϞ⧠āĻĻāĻŋāϝāĻŧā§āĻāĻŋāϞ āĻāĻŽāύāĻāĻž āĻšāĻŦā§āĨ¤
"Since C++20" āĻāϰ āϤā§āĻŽāĻŋ āĻāϏāϞ⧠āϝ⧠compiler āĻāĻžāϞāĻžāĻ
C++ standard āĻĒā§āϰāϤāĻŋ āϤāĻŋāύ āĻŦāĻāϰ⧠āύāϤā§āύ āĻšāϝāĻŧ: C++11, 14, 17, 20, 23āĨ¤ āĻā§āύ⧠āĻāĻŋāĻā§ āĻāĻŦā§ āĻāϏā§āĻā§, reference page āϏā§āĻāĻž āĻāĻŋāĻšā§āύ āĻĻāĻŋāϝāĻŧā§ āĻĻā§āĻāĻžāϝāĻŧ, āϝā§āĻŽāύ āĻāĻāĻāĻž signature-āĻāϰ āĻĒāĻžāĻļā§ (since C++20), āĻŦāĻž āĻāĻāĻāĻž āύāĻžāĻŽā§āϰ āĻĒāĻžāĻļā§ āĻā§āĻ āĻāϰ⧠(C++20)āĨ¤ āĻāĻ track āĻļā§āĻāĻžāϝāĻŧ C++17, āĻāĻžāϰāĻŖ āϝ⧠university lab āĻŦāĻž contest judge-āĻāϰ āϏāĻā§āĻā§ āϤā§āĻŽāĻžāϰ āĻĻā§āĻāĻž āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āĻāĻā§, āϏāĻŦāĻā§āϞā§āĻ āĻāĻāĻž āĻāĻžāϞāĻžāϝāĻŧāĨ¤
āϝā§āĻāĻžāύ⧠C++20 āĻāĻŋāĻā§ āĻāĻžāϞ⧠āĻāϰ⧠āĻĻā§āϝāĻŧ, lesson āϏā§āĻāĻž āĻĻā§āĻāĻžāϝāĻŧ "In C++20" āύāĻžāĻŽā§āϰ āĻāϞāĻžāĻĻāĻž āĻāĻāĻāĻž āĻŦāĻžāĻā§āϏā§, C++17 version-āĻāϰ āĻ āĻŋāĻ āĻĒāϰā§āĻāĨ¤ āĻāĻ āĻŦāĻžāĻā§āϏā§āϰ code Playground-āĻ āĻāϞ⧠-std=c++20-āĻāĨ¤ āĻĒā§āϰāĻĨāĻŽāĻāĻž āĻĻā§āĻāĻŦā§ āĻ āĻŋāĻ āύāĻŋāĻā§āĻ, āĻāϰ Module 2 āĻĨā§āĻā§ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ module-āĻ āĻāĻāĻāĻž āĻāϰā§āĨ¤
#include <iostream>
#include <set>
int main()
{
std::set<int> seen = {30, 10, 20};
if (seen.count(20) > 0) std::cout << "20 is in the set\n";
}
20 is in the set
C++17-āĻ set-āĻāϰ āĻā§āύ⧠"contains" function āύā§āĻ, āϤāĻžāĻ āϤā§āĻŽāĻŋ āĻŽāĻžāύāĻāĻž āĻā§āύā§āĨ¤ Set āĻĒā§āϰāϤāĻŋāĻāĻž āĻŽāĻžāύ āĻŦāĻĄāĻŧāĻā§āϰ āĻāĻāĻŦāĻžāϰ āϰāĻžāĻā§, āϤāĻžāĻ āĻā§āύāĻžāϰ āĻĢāϞ āĻšāϝāĻŧ 0, āύāϝāĻŧ 1āĨ¤ āĻāĻžāĻ āĻāϞā§, āĻāĻŋāύā§āϤ⧠āĻĒāĻĄāĻŧāϤ⧠āĻāĻāĻāĻž āĻā§āĻļāϞā§āϰ āĻŽāϤ⧠āϞāĻžāĻā§āĨ¤
Compiler-āĻ āĻāĻžāϞāĻžāĻIn C++20
set āĻāϰ map āĻĒā§āϝāĻŧā§āĻā§ contains(), āĻāĻĻā§āϰ reference page-āĻ (since C++20) āĻāĻŋāĻšā§āύ āĻĻā§āĻāϝāĻŧāĻžāĨ¤ āĻāĻĒāϰā§āϰ āĻā§āύ⧠āϤāĻžāϰāĻĒāϰ āϤā§āϞāύāĻž āĻāϰāĻžāϰ āĻāĻžāĻŽā§āϞāĻžāĻāĻž āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āĻāĻāĻāĻžāĻ call, āϝā§āĻāĻž āϝāĻž āĻŦā§āĻāĻžāϝāĻŧ āϏā§āĻāĻžāϏā§āĻāĻŋ āϤāĻžāĻ āĻŦāϞā§āĨ¤
#include <iostream>
#include <set>
int main()
{
std::set<int> seen = {30, 10, 20};
if (seen.contains(20)) std::cout << "20 is in the set\n";
}
20 is in the set
āĻāϰā§āĻāĻāĻž āϏ⧠āĻāĻĨāĻžāĨ¤ "Since C++20" āĻāĻŋāĻšā§āύ āĻŦāϞ⧠standard-āĻ āĻā§ āĻāĻā§, āϤā§āĻŽāĻžāϰ compiler āĻāϤāĻā§āĻā§ āĻŦāĻžāύāĻŋāϝāĻŧā§ āĻļā§āώ āĻāϰā§āĻā§ āϏā§āĻāĻž āύāĻžāĨ¤ Playground āĻāĻžāϞāĻžāϝāĻŧ GCC 12, āĻāϰ C++20 āϝāĻž āϝāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĻā§āϝāĻŧ, GCC 12-āĻ āϤāĻžāϰ āϏāĻŦāĻāĻŋāĻā§ āύā§āĻāĨ¤ āϏāĻŦāĻā§āϝāĻŧā§ āĻĒāϰāĻŋāĻāĻŋāϤ āĻĢāĻžāĻāĻāĻāĻž āĻšāϞ⧠std::format, formatted āϞā§āĻāĻž āĻŦāĻžāύāĻžāύā§āϰ C++20-āĻāϰ āĻāĻāĻāĻž āĻāĻĒāĻžāϝāĻŧ, āϝā§āĻāĻž āĻāϏā§āĻā§ GCC 13-āĻāĨ¤ āĻā§āύ⧠lesson-āĻ āĻāĻŽāύ āĻāĻŋāĻā§ āĻĻāϰāĻāĻžāϰ āĻšāϞ⧠āϏā§āĻāĻž C++17-āĻāϰ āĻāĻĒāĻžāϝāĻŧāĻāĻž āĻĻā§āĻāĻžāϝāĻŧ, āĻāϰ āύāϤā§āύāĻāĻžāϰ āύāĻžāĻŽ āĻŦāϞ⧠āĻĻā§āϝāĻŧ, āĻā§āύ compiler āϞāĻžāĻāĻŦā§ āϏā§āĻāĻž āϏāĻšāĨ¤ cppreference-āĻāϰ "compiler support" page āĻĒā§āϰāϤāĻŋāĻāĻž feature-āĻāϰ āĻāύā§āϝ āĻŦāϞ⧠āĻĻā§āϝāĻŧ, āĻā§āύ GCC version-āĻ āϏā§āĻāĻž āĻĒā§āϰāĻĨāĻŽ āĻāϏā§āĻā§āĨ¤
āĻāĻāĻž āĻā§āĻĨāĻžāϝāĻŧ āĻāĻžāĻā§ āϞāĻžāĻāĻā§
- cppreference.com. āĻāĻžāĻ āĻāϰāĻž C++ programmer-āϰāĻž āϝ⧠reference āĻā§āϞ⧠āϰāĻžāĻā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻž function-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻž page, āϤāĻžāϰ signature, complexity āĻāϰ āĻā§āύ āĻ āĻāĻļ āĻā§āύ standard-āĻ āĻāϏā§āĻā§ āϏā§āĻāĻž āϏāĻšāĨ¤ āĻāĻ track āϝāϤ āĻāϰāĻā§āϰ āĻāĻĨāĻž āĻŦāϞā§, āϤāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻž āĻāĻāĻžāύ⧠āϝāĻžāĻāĻžāĻ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
- ISO working draft. N4659 (C++17) āĻāϰ N4861 (C++20), āĻāϰ āϏāĻŦāĻā§āϝāĻŧā§ āύāϤā§āύāĻāĻžāϰ āĻāύā§āϝ eel.is/c++draftāĨ¤ STL āĻā§ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ āĻĻā§āϝāĻŧ āϤāĻž āύāĻŋāϝāĻŧā§ āĻĻā§āĻāĻāύā§āϰ āĻŽāϤā§āϰ āĻ āĻŽāĻŋāϞ āĻšāϞā§, āĻāĻ āϞā§āĻāĻžāĻāĻžāĻ āĻļā§āώ āĻāĻĨāĻž āĻŦāϞā§āĨ¤
- cppreference-āĻāϰ compiler support table. āĻĒā§āϰāϤāĻŋāĻāĻž standard-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻž table, āĻĒā§āϰāϤāĻŋāĻāĻž feature-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻž āϏāĻžāϰāĻŋ, āĻĒā§āϰāϤāĻŋāĻāĻž compiler-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻž columnāĨ¤ GCC 12-āĻ āĻā§āώā§āĻāĻž āĻāϰāĻžāϰ āĻāĻā§āĻ āĻāĻāĻžāύ āĻĨā§āĻā§ āĻāĻžāύāϤ⧠āĻĒāĻžāϰ⧠āϝā§
std::format-āĻāϰ āĻāύā§āϝ GCC 13 āϞāĻžāĻā§āĨ¤ - Progsity Playground. GCC 12,
-O2 -std=c++17-āĻ, āĻŦāĻž "In C++20" āĻŦāĻžāĻā§āϏā§āϰ āĻāύā§āϝ-std=c++20-āĻāĨ¤ Example 3-āĻāϰ āĻŽāϤ⧠āĻāĻāĻžāύ⧠āĻŽā§āĻĒā§ āĻĻā§āĻāĻžāĻāĻžāĻ āĻšāϞā§, āϤā§āĻŽāĻŋ āĻāϏāϞ⧠āϝ⧠āĻŽā§āĻļāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϏā§āĻāĻžāύ⧠āĻāĻāĻāĻž complexity āϞāĻžāĻāύ āϝāĻžāĻāĻžāĻ āĻāϰāĻžāϰ āĻāĻĒāĻžāϝāĻŧāĨ¤
āϝ⧠āĻā§āϞāĻā§āϞ⧠āϏāĻŦāĻžāĻ āĻāϰā§
ā§§. Iterator-āĻāϰ āĻŦāĻĻāϞ⧠āĻāĻžāϝāĻŧāĻāĻžāϰ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāϝāĻŧā§ insert call āĻāϰāĻžāĨ¤
std::vector<int> v = {1, 2, 3};
v.insert(2, 99);
GCC 12 āĻŦāϞ⧠error: no matching function for call to 'std::vector<int>::insert(int, int)', āϤāĻžāϰāĻĒāϰ āϝ⧠āϝ⧠form āĻā§āώā§āĻāĻž āĻāϰā§āĻā§ āϏāĻŦāĻā§āϞā§āϰ āϤāĻžāϞāĻŋāĻāĻž āĻĻā§āϝāĻŧāĨ¤ Signature-āĻā§āϞ⧠āĻĻā§āĻā§: pos āĻāĻāĻāĻž iterator, āĻāĻāύā§āĻ int āύāĻžāĨ¤ āϞā§āĻā§ v.insert(v.begin() + 2, 99);āĨ¤ āĻāĻ āĻā§āϞāĻāĻž āϤā§āĻŽāĻŋ āĻāϰāĻŦā§, āĻāĻžāϰāĻŖ "2-āĻ insert āĻāϰā§" āĻļā§āύāϤ⧠āĻāĻāĻāĻž āϏāĻāĻā§āϝāĻžāϰ āĻŽāϤā§āĻ āϞāĻžāĻā§āĨ¤
⧍. "Amortised constant" āĻĒāĻĄāĻŧā§ āĻāĻžāĻŦāĻž, "āĻĒā§āϰāϤāĻŋāĻāĻž call āĻĻā§āϰā§āϤ"āĨ¤
Example 2-āĻ āϝ⧠push capacity-āĻā§ 64 āĻĨā§āĻā§ 128-āĻ āύāĻŋāϝāĻŧā§ āĻā§āĻā§, āϏā§āĻāĻž 64āĻāĻž element āĻāĻĒāĻŋ āĻāϰā§āĻā§, āĻāϰ āĻĒāϰā§āϰ āϏāϰāĻžāύā§āĻā§āϞ⧠āĻāĻĒāĻŋ āĻāϰ⧠āĻāϰ⧠āĻ
āύā§āĻ āĻŦā§āĻļāĻŋāĨ¤ āĻāĻāύ⧠āĻāĻāύ⧠āĻāĻāĻāĻž āϧā§āϰ call-āĻ āϏāĻŽāϏā§āϝāĻž, āϧāϰ⧠āĻāĻŽāύ āĻāĻāĻāĻž game-āĻ, āϝā§āĻāĻžāĻā§ āĻĒā§āϰāϤāĻŋ 16 millisecond-āĻ āĻāĻāĻāĻž frame āĻāĻāĻāϤ⧠āĻšāϝāĻŧāĨ¤ āϤāĻāύ āĻāĻā§āĻ v.reserve(n) call āĻāϰā§, āϝāĻžāϤ⧠frame-āĻāϰ āĻŽāĻžāĻāĻāĻžāύ⧠vector-āĻā§ āĻāĻāύ⧠āϏāϰāϤ⧠āύāĻž āĻšāϝāĻŧāĨ¤ Amortised āĻšāϞ⧠āĻŽā§āĻā§āϰ āĻāĻĒāϰ āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ, āĻĒā§āϰāϤāĻŋāĻāĻž call-āĻāϰ āύāĻžāĨ¤
ā§Š. Playground-āĻ "since C++20" āĻāĻŋāĻšā§āύā§āϰ āĻāĻĒāϰ āĻāϰāϏāĻž āĻāϰāĻžāĨ¤
#include <format>
#include <iostream>
int main() {
std::cout << std::format("{} items\n", 3);
}
-std=c++20-āĻāĻ GCC 12 āĻŦāϞ⧠fatal error: format: No such file or directoryāĨ¤ GCC 12-āĻāϰ library-āϤ⧠header-āĻāĻžāĻ āύā§āĻ, āĻāĻžāϰāĻŖ std::format āĻāϏā§āĻā§ GCC 13-āĻāĨ¤ āύāϤā§āύ āĻāĻŋāĻā§ āϧāϰāĻžāϰ āĻāĻā§ compiler support table āĻĻā§āĻā§ āύāĻžāĻ, āĻāϰ āĻāĻāĻžāύ⧠āϞā§āĻā§ std::cout << 3 << " items\n";āĨ¤
std::vector<T>::push_back-āĻāϰ cppreference page āĻā§āϞā§āĨ¤ āĻāϰ complexity āϞāĻžāĻāύ āĻāϰ iterator invalidation-āĻāϰ āĻ
āύā§āĻā§āĻā§āĻĻ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰā§, āĻāϰ āĻĻā§āĻāĻāĻžāĻ āύāĻŋāĻā§āϰ āĻāĻžāώāĻžāϝāĻŧ āϞāĻŋāĻā§ āϰāĻžāĻā§āĨ¤
āύāĻŋāĻā§ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ Complexity āĻšāϞ⧠amortised constantāĨ¤ Invalidation-āĻāϰ āύāĻŋāϝāĻŧāĻŽ insert-āĻāϰāĻāĻžāϰ āĻŽāϤā§āĻ: vector āϝāĻĻāĻŋ capacity āĻāĻžāĻĄāĻŧāĻŋāϝāĻŧā§ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, āĻĒā§āϰāϤāĻŋāĻāĻž iterator āĻ
āĻāϞ; āύāĻāϞ⧠āĻ
āĻāϞ āĻšāϝāĻŧ āĻļā§āϧ⧠end iteratorāĨ¤
Example 3 Playground-āĻ āĻāĻžāϞāĻžāĻ, āĻāϰ āϤā§āĻŽāĻžāϰ āϤāĻŋāύāĻāĻž āϞāĻžāĻāύ āĻāĻĒāĻŋ āĻāϰ⧠āϰāĻžāĻā§āĨ¤ āϤāĻžāϰāĻĒāϰ āĻĻā§āĻāĻāĻž āĻ
āύā§āĻĒāĻžāϤ āĻŦā§āϰ āĻāϰā§: 100,000-āĻ push_back-āĻā§ 10,000-āĻ push_back āĻĻāĻŋāϝāĻŧā§ āĻāĻžāĻ, āĻāϰ āϏāĻžāĻŽāύ⧠insert-āĻāϰ āĻāύā§āϝāĻ āĻāĻāĻ āĻšāĻŋāϏāĻžāĻŦāĨ¤
āύāĻŋāϝāĻŧāĻŽāĨ¤ āĻĻā§āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāĻ, āĻāϰ āĻĻā§āĻāĻŦāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āϤā§āĻŽāĻžāϰ āϏāĻāĻā§āϝāĻž āĻāϤāĻāĻž āύāĻĄāĻŧā§āĻā§ āĻŦāϞā§āĨ¤
āύāĻŋāĻā§ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻ
āύā§āĻĒāĻžāϤāĻāĻž 10-āĻāϰ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻšāĻāϝāĻŧāĻžāϰ āĻāĻĨāĻž, āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧāĻāĻž āĻ
āύā§āĻ āĻŦāĻĄāĻŧ, āĻŽā§āĻļāĻŋāύ āϏā§āĻĨāĻŋāϰ āĻĨāĻžāĻāϞ⧠100-āĻāϰ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋāĨ¤ āĻĻā§āĻāĻāĻžāĻ 10-āĻāϰ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻšāϞ⧠āĻĻā§āĻā§, āϤā§āĻŽāĻžāϰ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ loop front.begin()-āĻ insert āĻāϰāĻā§ āĻāĻŋ āύāĻžāĨ¤
āĻļā§āϧ⧠complexity āϞāĻžāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, 100,000-āĻāϰ āϏāĻāĻā§āϝāĻžāĻāĻž āĻĨā§āĻā§ āĻāύā§āĻĻāĻžāĻ āĻāϰā§, n = 1,000,000 āĻšāϞ⧠Example 3-āĻāϰ āϏāĻžāĻŽāύ⧠insert āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻāϤ āϏāĻŽāϝāĻŧ āύā§āĻŦā§āĨ¤ āĻāĻžāϞāĻžāĻŦā§ āύāĻž: Playground-āĻ āĻāĻāĻž time limit-āĻ āĻāĻāĻā§ āϝāĻžāĻŦā§āĨ¤
āύāĻŋāϝāĻŧāĻŽāĨ¤ āϝ⧠āĻāĻāĻāĻž āĻā§āĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻ āϏā§āĻāĻž āĻĻā§āĻāĻžāĻ, āĻāϰ āĻā§āύ complexity āϞāĻžāĻāύ āϏā§āĻ āĻā§āĻŖāĻāĻžāϰ āĻĒāĻā§āώ⧠āĻāĻĨāĻž āĻŦāϞā§, āϏā§āĻāĻž āĻŦāϞā§āĨ¤
āύāĻŋāĻā§ āϝāĻžāĻāĻžāĻ āĻāϰā§āĨ¤ āĻĒā§āϰ⧠āĻāĻžāĻāĻāĻž n-āĻāϰ āĻŦāϰā§āĻā§āϰ āĻŽāϤ⧠āĻŦāĻžāĻĄāĻŧā§, āϤāĻžāĻ n āĻĻāĻļ āĻā§āĻŖ āĻŽāĻžāύ⧠āϏāĻŽāϝāĻŧ āĻĒā§āϰāĻžāϝāĻŧ āĻāĻāĻļā§ āĻā§āĻŖāĨ¤ 308,680 us āĻĨā§āĻā§ āĻāύā§āĻĻāĻžāĻ āĻĻāĻžāĻāĻĄāĻŧāĻžāϝāĻŧ āĻĒā§āϰāĻžāϝāĻŧ 30 āϏā§āĻā§āύā§āĻĄāĨ¤ āϤāĻžāϰāĻĒāϰ āĻŦā§āĻāĻŋāϝāĻŧā§ āĻŦāϞā§, push_back āϤāĻāύāĻ āĻā§āύ āĻāĻ āϏā§āĻā§āύā§āĻĄā§āϰ āĻāĻāĻļā§ āĻāĻžāĻā§āϰ āĻāĻ āĻāĻžāĻā§āϰ āĻ
āύā§āĻ āĻāĻŽ āϏāĻŽāϝāĻŧ āύā§āĻŦā§āĨ¤
āϝ⧠āĻĒā§āϰāĻļā§āύāĻā§āϞ⧠āϏāĻŦāĻžāϰ āĻŽāύ⧠āĻāϏā§
cppreference āĻāĻŋ official?
āύāĻžāĨ¤ āĻāĻāĻž āĻāĻāĻāĻž community wiki, standard āĻĨā§āĻā§ āϞā§āĻāĻž āĻāϰ āĻ āύā§āĻ āĻĒāĻžāĻ āĻā§āϰ āϝāĻžāĻāĻžāĻ āĻāϰāĻžāĨ¤ āĻāĻāĻž āĻāϤāĻāĻžāĻ āύāĻŋāϰā§āĻā§āϞ āϝ⧠āĻĒā§āĻļāĻžāĻĻāĻžāϰāϰāĻž āϰā§āĻ āĻāϰ āĻāĻĒāϰ āĻāϰāϏāĻž āĻāϰā§, āĻāϰ āϝāĻāύ āĻŦā§āϝāĻžāĻĒāĻžāϰāĻāĻž āϏāϤā§āϝāĻŋāĻ āĻāϰā§āϰāĻŋ, āϤāĻāύ working draft-āĻ āĻļā§āώ āĻāĻĨāĻžāĨ¤
C++23 āĻĨāĻžāĻāϤ⧠āĻāĻ track C++17 āĻļā§āĻāĻžāϝāĻŧ āĻā§āύ?
āĻāĻžāϰāĻŖ āϝā§āĻāĻžāύ⧠āϝā§āĻāĻžāύ⧠āϤā§āĻŽāĻžāϰ āĻĒāϰā§āĻā§āώāĻž āĻšāĻŦā§, āϏāĻŦ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ C++17 āĻāϞā§: university lab, contest judge āĻāϰ PlaygroundāĨ¤ āϝā§āĻāĻžāύ⧠C++20 āĻāĻžāĻā§ āϞāĻžāĻā§, āϏā§āĻāĻžāύ⧠āĻāĻāĻž āύāĻŋāĻā§āϰ āĻŦāĻžāĻā§āϏ⧠āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧ, āĻāϰ āύāϤā§āύ āĻ āĻāĻļāĻā§āϞ⧠āϏāĻžāĻŽāύā§āϰ āĻāϝāĻŧā§āĻ āĻŦāĻāϰ⧠āϤā§āĻŽāĻžāϰ compiler-āĻ āĻāϏ⧠āĻĒā§āĻāĻāĻžāĻŦā§āĨ¤
āĻāĻŽāĻžāϰ āĻŽāĻžāĻĒāĻž āϏāĻāĻā§āϝāĻž āĻāĻŋ lesson-āĻāϰ āϏāĻāĻā§āϝāĻžāϰ āϏāĻā§āĻā§ āĻŽāĻŋāϞāĻŦā§?
āϏāĻāĻā§āϝāĻž āĻŽāĻŋāϞāĻŦā§ āύāĻž, āĻŽā§āϞāĻžāϰ āĻāĻĨāĻžāĻ āύāĻžāĨ¤ āĻŽā§āĻļāĻŋāύ āĻāϞāĻžāĻĻāĻž, āĻāϰ āĻāĻāĻ āĻŽā§āĻļāĻŋāύ⧠āĻĻā§āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāϞā§āĻ āĻāĻāĻā§ āĻāϞāĻžāĻĻāĻž āĻāϏā§āĨ¤ āϝā§āĻāĻž āĻŽā§āϞāĻž āĻāĻāĻŋāϤ āϏā§āĻāĻž āĻšāϞ⧠āĻāĻĄāĻŧāύ: n āĻĻāĻļ āĻā§āĻŖ āĻšāϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻž āϏāĻŽāϝāĻŧ āĻā§āĻāĻžāĻŦā§ āĻŦāĻžāĻĄāĻŧā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻŋ āĻĒā§āϰ⧠page āĻĒāĻĄāĻŧāϤ⧠āĻšāĻŦā§?
āύāĻžāĨ¤ āĻā§āĻāĻžāĻŦā§ call āĻāϰāĻŦā§ āĻĻā§āĻāϤ⧠signature āĻĒāĻĄāĻŧā§, āĻāϰāĻ āĻĻā§āĻāϤ⧠complexity āĻĒāĻĄāĻŧā§, āĻāϰ iterator āĻšāĻžāϤ⧠āϰā§āĻā§ āĻĻāĻŋāϞ⧠invalidation note āĻĒāĻĄāĻŧā§āĨ¤ āĻŦāĻžāĻāĻŋāĻāĻž āĻĻāϰāĻāĻžāϰ āĻšāϞ⧠āĻāĻāĻžāύā§āĻ āĻāĻā§āĨ¤
āĻŽā§āϞ āĻāĻĨāĻž
- cppreference āĻšāϞ⧠āĻā§āϞ⧠āϰāĻžāĻāĻžāϰ page; ISO working draft-āĻ āĻļā§āώ āĻāĻĨāĻžāĨ¤
- Page-āĻāϰ āĻāĻžāϰāĻāĻž āĻ āĻāĻļ āĻāĻā§ āĻĻā§āĻāĻŦā§: signature, parameter, complexity āĻāϰ invalidation noteāĨ¤
- Complexity āϞāĻžāĻāύ āĻŦā§āĻĻā§āϧāĻŋ āύāĻŋāϝāĻŧā§ āĻāĻāĻāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰā§āϤāĻŋ, āĻāϰ n āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧā§ āϤā§āĻŽāĻŋ āϏā§āĻāĻž āϝāĻžāĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
- Amortised constant āĻŽāĻžāύ⧠āĻ āύā§āĻāĻŦāĻžāϰ call āĻāϰāϞ⧠āĻāĻĄāĻŧā§ constant, āĻŽāĻžāĻā§ āĻŽāĻžāĻā§ āĻĻā§āĻ āĻāĻāĻāĻž āϧā§āϰ call āϏāĻšāĨ¤
- "Since C++20" āĻāĻĨāĻžāĻāĻž standard āύāĻŋāϝāĻŧā§; Playground-āĻāϰ GCC 12-āĻ āĻāϰ āĻāĻŋāĻā§ āĻ
āĻāĻļ āύā§āĻ, āϝā§āĻŽāύ
std::formatāĨ¤
āĻāϤā§āĻ āύāĻāĻļāĻžāĻāĻž āĻĒā§āϰ⧠āĻšāϞā§āĨ¤ Module 1 āĻāĻāύ āϏā§āĻ āĻāϝāĻŧā§āĻāĻāĻž C++ āĻāĻŋāύāĻŋāϏ āĻļā§āĻāĻžāĻŦā§, āϝā§āĻā§āϞ⧠track-āĻāϰ āĻŦāĻžāĻāĻŋāĻāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻļā§āϰ⧠āĻšāĻŦā§ āĻāĻāĻ program C āĻāϰ C++-āĻ āϞā§āĻāĻž āĻĻāĻŋāϝāĻŧā§āĨ¤
Module test
āĻāĻ module āĻāϰ āĻāĻĒāϰ āĻĻāĻļāĻāĻž āĻĒā§āϰāĻļā§āύāĨ¤ 70% āĻĒā§āϞ⧠pass, āĻāϰ āϝāϤāĻŦāĻžāϰ āĻā§āĻļāĻŋ āĻĻā§āĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤
Module test āĻĻāĻŋāύlesson ā§Ģ āĻļā§āώ
āĻļā§āώ āĻšāϞ⧠āĻāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ āĻā§āϰāĻāϤāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻžāĻĨā§ āĻĨāĻžāĻāĻŦā§āĨ¤
āĻĒāϰā§āϰāĻāĻž: Module test: STL āĻāĻŋāύāĻŋāϏāĻāĻž āĻā§