Learn C++ STL

lesson ā§Ģ / ā§Ŧ ¡ STL āϜāĻŋāύāĻŋāϏāϟāĻž āϕ⧀, āφāϰ āĻāϟāĻž C++ āϞ⧇āĻ–āĻžāϰ āϧāϰāύāϟāĻžāχ āĻĒāĻžāĻ˛ā§āĻŸā§‡ āĻĻ⧇āϝāĻŧ āϕ⧇āύ

Module ā§Ļ ¡ STL āϜāĻŋāύāĻŋāϏāϟāĻž āϕ⧀, āφāϰ āĻāϟāĻž C++ āϞ⧇āĻ–āĻžāϰ āϧāϰāύāϟāĻžāχ āĻĒāĻžāĻ˛ā§āĻŸā§‡ āĻĻ⧇āϝāĻŧ āϕ⧇āύ

cppreference āĻĒāĻĄāĻŧāĻŦ āϕ⧀āĻ­āĻžāĻŦ⧇, āφāϰ O(log n) āĻŽāĻžāύ⧇ āφāϏāϞ⧇ āϕ⧀ promise

FreeāĻĒāĻĄāĻŧāĻž

āĻāχ 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-āϟāĻž āĻ–ā§‹āϞ⧋āĨ¤ āĻĻ⧇āĻ–āϤ⧇ āĻ āĻžāϏāĻž āϞāĻžāϗ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϤ⧇ āϏāĻŦ āϏāĻŽāϝāĻŧ āĻāĻ•āχ āĻ…āĻ‚āĻļ āĻāĻ•āχ āĻ•ā§āϰāĻŽā§‡ āĻĨāĻžāϕ⧇, āφāϰ āĻ“āĻĻ⧇āϰ āϚāĻžāϰāϟāĻžāϤ⧇āχ āϤ⧋āĻŽāĻžāϰ āĻĻāϰāĻ•āĻžāϰāĻŋ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦāĻ•āĻŋāϛ⧁ āφāϛ⧇āĨ¤

cppreference-āĻāϰ āĻāĻ•āϟāĻž function page-āĻāϰ āĻ…āĻ‚āĻļāϗ⧁āϞ⧋, āφāϏāϞ āϚāĻžāϰāϟāĻž āĻĻāĻžāĻ—āĻžāύ⧋ std::vector<T>::insert iterator insert( const_iterator pos, ... ); (1) ... form (2) āĻĨ⧇āϕ⧇ (5), "since" āϚāĻŋāĻšā§āύāϏāĻš āĻāϟāĻž āϕ⧀ āĻ•āϰ⧇, āϤāĻžāϰāĻĒāϰ āϕ⧋āύ āϕ⧋āύ iterator āĻĒāϰ⧇āĻ“ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇ Parameters: pos, value, count, first, last Return value Complexity: n āĻŦāĻžāĻĄāĻŧāϞ⧇ āĻ•āĻžāϜ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻĄāĻŧ⧇ Exceptions Example, See also 1. Signatures call āĻ•āϰāĻžāϰ āϏāĻŦ āωāĻĒāĻžāϝāĻŧ 4. Invalidation āĻĒāϰ⧇ āϕ⧀ āϭ⧇āϙ⧇ āϝāĻžāϝāĻŧ 2. Parameters 3. Complexity āĻ–āϰāϚ, āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇
āĻ›āĻŦāĻŋ 1āĨ¤ āωāĻĒāϰ āĻĨ⧇āϕ⧇ āύāĻŋāĻšā§‡ āĻāĻ•āϟāĻž function 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: pos parameter, āĻāĻ•āϟāĻž iteratorāĨ¤ āύāϤ⧁āύ element āĻŦāϏāĻŦ⧇ 1 āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϰ element-āĻāϰ āφāϗ⧇āĨ¤
  • 15: value parameterāĨ¤ āĻāχ call form (1) āĻŦāĻž (2)-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻŽā§‡āϞ⧇āĨ¤
  • auto it =: return value, āĻāĻ•āϟāĻž iterator, āϝ⧇āϟāĻž āύāϤ⧁āύ element-āĻ āφāϙ⧁āϞ āϰāĻžāϖ⧇āĨ¤
Example 1: page āĻĨ⧇āϕ⧇ āĻĒāĻĄāĻŧāĻž insert-āĻāϰ āĻĻ⧁āχāϟāĻž form
#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 āĻŦāϏāĻžāύ⧋āĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“

Complexity-āϰ āĻļāĻŦā§āĻĻāϗ⧁āϞ⧋

Reference page āĻ–āϰāϚ āĻŦā§‹āĻāĻžāϝāĻŧ āĻ…āĻ˛ā§āĻĒ āĻ•āϝāĻŧ⧇āĻ•āϟāĻž āĻŦāĻžāρāϧāĻž āĻļāĻŦā§āĻĻ⧇āĨ¤ Lesson 3 āϤ⧋āĻŽāĻžāϕ⧇ āĻāϰ āϤāĻŋāύāϟāĻž āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ track-āĻ āϝāϤāϗ⧁āϞ⧋āϰ āĻĻ⧇āĻ–āĻž āĻĒāĻžāĻŦ⧇, āĻĒ⧁āϰ⧋ set-āϟāĻž āύāĻŋāĻšā§‡ āφāϛ⧇, āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āĻĒāĻžāĻļ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻž āϏāĻ¤ā§āϝāĻŋāĻ•āĻžāϰ⧇āϰ operation, āϝāĻžāϰ āĻ–āϰāϚ āĻ āĻŋāĻ• āĻ“āϟāĻžāχāĨ¤

Page-āĻ āϞ⧇āĻ–āĻž āĻĨāĻžāϕ⧇Big-OāϏ⧋āϜāĻž āĻ•āĻĨāĻžāϝāĻŧāĻāχ āĻ–āϰāĻšā§‡āϰ āĻāĻ•āϟāĻž operation
ConstantO(1)n-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻŦāĻžāĻĄāĻŧ⧇ āύāĻžvector-āĻ v[i]
LogarithmicO(log n)n āĻĻā§āĻŦāĻŋāϗ⧁āĻŖ āĻšāϞ⧇ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āĻāĻ• āϧāĻžāĻĒ āĻŦāĻžāĻĄāĻŧ⧇set-āĻ s.find(x)
LinearO(n)āĻĻāĻļ āϗ⧁āĻŖ n, āĻĻāĻļ āϗ⧁āĻŖ āĻ•āĻžāϜāĻāĻ•āϟāĻž range-āĻ std::find
Linearithmic, āĻŦāĻž N log NO(n log n)linear-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻāĻ•āϟ⧁ āĻŦ⧇āĻļāĻŋstd::sort
Amortised constantāĻ—āĻĄāĻŧ⧇ O(1)āĻ…āύ⧇āĻ•āĻŦāĻžāϰ call āĻ•āϰāϞ⧇ āĻ—āĻĄāĻŧ⧇ constantv.push_back(x)

āĻļ⧇āώ āϏāĻžāϰāĻŋāϟāĻž āĻāĻ•āϟ⧁ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻĻ⧇āĻ–āĻž āĻĻāϰāĻ•āĻžāϰ, āĻ•āĻžāϰāĻŖ David āĻ āĻŋāĻ• āĻāϟāĻž āύāĻŋāϝāĻŧ⧇āχ āĻĒā§āϰāĻļā§āύ āĻ•āϰ⧇āĻ›āĻŋāϞāĨ¤ Amortised āĻŽāĻžāύ⧇ "āĻ…āύ⧇āĻ•āĻŦāĻžāϰ call āĻ•āϰāϞ⧇ āĻ—āĻĄāĻŧ⧇"āĨ¤ push_back-āĻāϰ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— call āĻāĻ• āϧāĻžāĻĒ⧇āϰāĨ¤ āĻŽāĻžāĻā§‡ āĻŽāĻžāĻā§‡ vector āĻ­āϰ⧇ āϝāĻžāϝāĻŧ, āϤāĻ–āύ āϏ⧇ memory-āϰ āĻāĻ•āϟāĻž āĻŦāĻĄāĻŧ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϏāϰ⧇ āϝāĻžāϝāĻŧ āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž element āĻ•āĻĒāĻŋ āĻ•āϰ⧇āĨ¤ āĻ“āχ āĻāĻ•āϟāĻž call āϧ⧀āϰāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ capacity āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻ•āϝāĻŧ⧇āĻ• āϗ⧁āĻŖ āĻ•āϰ⧇ āĻŦāĻžāĻĄāĻŧ⧇, āϤāĻžāχ āϧ⧀āϰ call-āϗ⧁āϞ⧋ āĻāϤ āĻ•āĻŽ āφāϏ⧇ āϝ⧇ āĻ—āĻĄāĻŧāϟāĻž constant-āχ āĻĨāĻžāϕ⧇āĨ¤

Example 2: amortised 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 āĻļ⧁āϧ⧁ āĻ—āĻĄāĻŧ⧇āϰ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“

āĻŽā§‡āĻĒ⧇ āĻĻ⧇āϖ⧇ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āϝāĻžāϚāĻžāχ

Complexity āϞāĻžāχāύ āĻšāϞ⧋ āĻŦ⧃āĻĻā§āϧāĻŋ āύāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ, āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻŽāĻžāĻĒāĻž āϕ⧋āύ⧋ āϏāĻŽāϝāĻŧ āύāĻžāĨ¤ āϤāĻžāχ āĻ¸ā§Ž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻšāϞ⧋ n āĻŦāĻžāĻĄāĻŧāĻžāύ⧋ āφāϰ āϤāĻžāĻ•āĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–āĻžāĨ¤ āĻāχ program n-āϟāĻž āϏāĻ‚āĻ–ā§āϝāĻžāϰ āĻāĻ•āϟāĻž vector āĻĻ⧁āχāĻŦāĻžāϰ āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ push_back āĻĻāĻŋāϝāĻŧ⧇, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻž amortised constantāĨ¤ āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āϏāĻ‚āĻ–ā§āϝāĻž āϏāĻžāĻŽāύ⧇ insert āĻ•āϰ⧇, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻž linear, āϤāĻžāχ āĻĒ⧁āϰ⧋ āĻ•āĻžāϜāϟāĻž āĻŦāĻžāĻĄāĻŧ⧇ n-āĻāϰ āĻŦāĻ°ā§āϗ⧇āϰ āĻŽāϤ⧋āĨ¤

Example 3: push_back āĻŦāύāĻžāĻŽ āϏāĻžāĻŽāύ⧇ insert
#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, āĻāĻ• āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻĻāĻļ āϞāĻžāĻ– āĻ­āĻžāϗ⧇āϰ āĻāĻ• āĻ­āĻžāĻ—āĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
push_back āφāϰ āϏāĻžāĻŽāύ⧇ insert-āĻāϰ āĻŽāĻžāĻĒāĻž āϏāĻŽāϝāĻŧ, āĻāĻ•āĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋ 1 us 100 us 10 ms 1 s 7 25 56 1,943 472 308,680 n = 1,000 n = 10,000 n = 100,000 push_back, āϏāĻŦ n-āĻ āϏāĻžāĻŽāύ⧇ insert, āϏāĻŦ n-āĻ (microsecond, āĻāĻ•āĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋)
āĻ›āĻŦāĻŋ 2āĨ¤ Example 3-āĻāϰ āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞ⧋, āĻāĻŽāύ āĻāĻ•āϟāĻž āϏāĻŽāϝāĻŧ⧇āϰ āĻ…āĻ•ā§āώ⧇, āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž āϞāĻžāχāύ āύāĻŋāĻšā§‡āϰāϟāĻžāϰ 100 āϗ⧁āĻŖāĨ¤ n āĻĻāĻļ āϗ⧁āĻŖ āĻšāϞ⧇ push_back āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āĻĻāĻļ āϗ⧁āĻŖ āĻŦāĻžāĻĄāĻŧ⧇; āϏāĻžāĻŽāύ⧇ insert āĻŦāĻžāĻĄāĻŧ⧇ āϤāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻ…āύ⧇āĻ• āĻĻā§āϰ⧁āϤāĨ¤

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-āĻ āĻāĻ•āϟāĻž āĻ•āϰ⧇āĨ¤

Example 4: C++17-āĻ āĻāĻ•āϟāĻž set-āϕ⧇ āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰāĻž, āĻŽāĻžāύāϟāĻž āĻ“āϰ āĻ•āĻžāϛ⧇ āφāϛ⧇ āĻ•āĻŋ āύāĻž
#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
Compiler-āĻ āϚāĻžāϞāĻžāĻ“

āφāϰ⧇āĻ•āϟāĻž āĻ¸ā§Ž āĻ•āĻĨāĻžāĨ¤ "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";āĨ¤

āĻŽāĻžāĻĨāĻž āĻ–āĻžāϟāĻžāĻ“

āύāĻŋāĻšā§‡ āϤāĻŋāύāϟāĻž complexity āϞāĻžāχāύ, āϤāĻŋāύāϟāĻž āϏāĻ¤ā§āϝāĻŋāĻ•āĻžāϰ⧇āϰ reference page āĻĨ⧇āϕ⧇ āĻāĻ•āϟ⧁ āĻŦāĻĻāϞ⧇ āύ⧇āĻ“āϝāĻŧāĻžāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻžāϕ⧇ āϤāĻžāϰ operation-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻŽā§‡āϞāĻžāĻ“: std::sort, std::vector::operator[] (āĻŽāĻžāύ⧇ v[i]) āύāĻžāĻ•āĻŋ std::map::findāĨ¤

  1. Container-āĻāϰ size-āĻāϰ logarithmicāĨ¤
  2. ConstantāĨ¤
  3. āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ N log N-āϟāĻž āϤ⧁āϞāύāĻž, āϝ⧇āĻ–āĻžāύ⧇ N āĻšāϞ⧋ range-āĻāϰ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝāĨ¤

āĻĻ⧁āχāϟāĻžāϰ āϜāĻ¨ā§āϝ Lesson 3-āĻāϰ table āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧋āĨ¤ āϤ⧃āϤ⧀āϝāĻŧāϟāĻžāϰ āϜāĻ¨ā§āϝ āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰ⧋, āϤāĻŋāύāϟāĻž operation-āĻāϰ āϕ⧋āύāϟāĻžāϰ container āύāĻž, āĻĒ⧁āϰ⧋ āĻāĻ•āϟāĻž range āϞāĻžāϗ⧇āĨ¤

āĻ…āύ⧁āĻļā§€āϞāύ ā§§āϏāĻšāϜ

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 āϜāĻŋāύāĻŋāϏāϟāĻž āϕ⧀

cppreference āĻĒāĻĄāĻŧāĻŦ āϕ⧀āĻ­āĻžāĻŦ⧇, āφāϰ O(log n) āĻŽāĻžāύ⧇ āφāϏāϞ⧇ āϕ⧀ promise | Learn C++ STL | Progsity