Learn C++ STL

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

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

container-āϗ⧁āϞ⧋ āĻāĻ• āύāϜāϰ⧇: āϕ⧋āύāϟāĻž āϕ⧀ āĻ•āĻžāĻœā§‡ āĻ­āĻžāϞ⧋

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

āĻāχ lesson-āĻ āϝāĻž āĻļāĻŋāĻ–āĻŦ⧇

  • āĻāχ track āϝ⧇ container-āϗ⧁āϞ⧋ āĻļ⧇āĻ–āĻžāϝāĻŧ, āϏ⧇āϗ⧁āϞ⧋āϕ⧇ āϤāĻŋāύāϟāĻž āĻĒāϰāĻŋāĻŦāĻžāϰ⧇ āĻ­āĻžāĻ— āĻ•āϰ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻž container āϕ⧋āύ āĻāĻ•āϟāĻž āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āĻĻ⧇āϝāĻŧ, āϏ⧇āϟāĻž āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĨ¤
  • O(1), O(log n) āφāϰ O(n) āĻĻāĻŋāϝāĻŧ⧇ āϞ⧇āĻ–āĻž āĻ–āϰāĻšā§‡āϰ table āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āϕ⧋āύ⧋ container āϭ⧇āϤāϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āϏ⧇āϟāĻž āύāĻž āĻœā§‡āύ⧇āχāĨ¤

Kenji Lesson 1 āĻĒāĻĄāĻŧ⧇ āĻĢ⧇āϞ⧇āϛ⧇, āφāϰ āϤāĻžāϰ āĻāĻ•āϟāĻžāχ āĻĒā§āϰāĻļā§āύ: "āϕ⧋āύ container āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ?" Team-āĻ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ code āϞ⧇āϖ⧇ AmaraāĨ¤ āϏ⧇ āωāĻ˛ā§āĻŸā§‹ āĻāĻ•āϟāĻž āĻĒā§āϰāĻļā§āύ āĻ•āϰ⧇: "āĻ•āĻŋāϏ⧇ āĻĻā§āϰ⧁āϤ?"

āϝ⧇ container āĻāĻ• āϧāĻžāĻĒ⧇ āĻļ⧇āώ⧇ āϝ⧋āĻ— āĻ•āϰ⧇, āĻāĻ•āϟāĻž āĻŽāĻžāύ āϖ⧁āρāϜāϤ⧇ āϤāĻžāϰ āĻšāϝāĻŧāϤ⧋ āĻĻāĻļ āϞāĻžāĻ– āϧāĻžāĻĒ āϞāĻžāϗ⧇āĨ¤ āϝ⧇ container 20 āϧāĻžāĻĒ⧇ āĻāĻ•āϟāĻž āĻŽāĻžāύ āϖ⧁āρāĻœā§‡ āĻĻ⧇āϝāĻŧ, āϏ⧇ 5 āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϕ⧀ āφāϛ⧇ āϏ⧇āϟāĻž āϚāϟ āĻ•āϰ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻžāĨ¤ āĻāχ lesson-āϟāĻžāχ Amara-āϰ āωāĻ¤ā§āϤāϰ: āĻĒā§āϰāϤāĻŋāϟāĻž container, āϕ⧋āύ āĻĒā§āϰāĻļā§āύ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧇āϟāĻž āĻŦāĻžāύāĻžāύ⧋, āφāϰ āĻ–āϰāĻšā§‡āϰ āĻāĻ•āϟāĻž tableāĨ¤

āϕ⧋āύ⧋āϟāĻž āϭ⧇āϤāϰ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϏ⧇āϟāĻž āĻāĻ–āύāχ āĻļāĻŋāĻ–āĻŦ⧇ āύāĻžāĨ¤ āĻ“āϟāĻžāϰ āϜāĻ¨ā§āϝ āφāϛ⧇ Module 2 āĻĨ⧇āϕ⧇ 10āĨ¤ āĻāĻ–āĻžāύ⧇ āĻĒ⧁āϰ⧋ āϤāĻžāĻ•āϟāĻž āĻāĻ•āϏāĻ™ā§āϗ⧇ āĻĒāĻžāĻŦ⧇, āϝāĻžāϤ⧇ āĻĒāϰ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻž module āĻāĻŽāύ āĻāĻ•āϟāĻž āĻ›āĻŦāĻŋ āĻ­āϰāĻžāϟ āĻ•āϰ⧇, āϝ⧇āϟāĻž āϤ⧋āĻŽāĻžāϰ āĻŽāĻžāĻĨāĻžāϝāĻŧ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āφāϛ⧇āĨ¤

Container-āĻāϰ āϤāĻŋāύāϟāĻž āĻĒāϰāĻŋāĻŦāĻžāϰ

Element-āϗ⧁āϞ⧋ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāϝāĻŧ, āϏ⧇āχ āĻšāĻŋāϏāĻžāĻŦ⧇ container āϤāĻŋāύāϟāĻž āĻĒāϰāĻŋāĻŦāĻžāϰ⧇ āĻ­āĻžāĻ— āĻšāϝāĻŧāĨ¤

  • Sequence container element-āϗ⧁āϞ⧋ āϰāĻžāϖ⧇ āĻ āĻŋāĻ• āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āϤ⧁āĻŽāĻŋ āĻĸ⧁āĻ•āĻŋāϝāĻŧ⧇āĻ›: vector, string, array, deque āφāϰ listāĨ¤
  • Container adaptor āĻāĻ•āϟāĻž sequence container-āϕ⧇ āĻŽā§āĻĄāĻŧ⧇ āϰāĻžāϖ⧇, āφāϰ āϤ⧋āĻŽāĻžāϕ⧇ āĻļ⧁āϧ⧁ āĻāĻ• āĻŦāĻž āĻĻ⧁āχ āĻŽāĻžāĻĨāĻž āϛ⧁āρāϤ⧇ āĻĻ⧇āϝāĻŧ: stack, queue āφāϰ priority_queueāĨ¤
  • Associative container element-āϗ⧁āϞ⧋ āϏāĻžāϜāĻžāϝāĻŧ āĻ“āĻĻ⧇āϰ āĻŽāĻžāύ āĻĻ⧇āϖ⧇, āϝāĻžāϤ⧇ āĻāĻ•āϟāĻž āĻĻā§āϰ⧁āϤ āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻ“āĨ¤ āĻāϰāĻž āĻšāϞ⧋ set āφāϰ map, āĻ“āĻĻ⧇āϰ multi āϰ⧂āĻĒ, āϝ⧇āĻ–āĻžāύ⧇ āĻāĻ•āχ āĻŽāĻžāύ āĻŦāĻžāϰāĻŦāĻžāϰ āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧ, āφāϰ āĻ“āĻĻ⧇āϰ unordered āϰ⧂āĻĒ, āϝ⧇āϗ⧁āϞ⧋ āĻ•ā§āϰāĻŽā§‡āϰ āĻŦāĻĻāϞ⧇ hashing āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤

āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝāϗ⧁āϞ⧋ āϝāĻžāϤ⧇ āϏāĻšāĻœā§‡ āĻšā§‹āϖ⧇ āĻĒāĻĄāĻŧ⧇, āϤāĻžāχ āύāĻŋāĻšā§‡āϰ āĻĒā§āϰāϤāĻŋāϟāĻž example āĻāĻ•āχ āϤāĻŋāύāϟāĻž āϏāĻ‚āĻ–ā§āϝāĻž āĻāĻ•āχ āĻ•ā§āϰāĻŽā§‡ āĻĸā§‹āĻ•āĻžāϝāĻŧ: āĻĒā§āϰāĻĨāĻŽā§‡ 30, āϤāĻžāϰāĻĒāϰ 10, āϤāĻžāϰāĻĒāϰ 20āĨ¤ āϖ⧇āϝāĻŧāĻžāϞ āϰāĻžāĻ–ā§‹, āĻ“āϰāĻž āϕ⧋āύ āĻ•ā§āϰāĻŽā§‡ āĻŦ⧇āϰāĻŋāϝāĻŧ⧇ āφāϏ⧇āĨ¤ āĻļ⧁āϧ⧁ āĻ“āχ āĻ•ā§āϰāĻŽāϟāĻžāχ āĻĒā§āϰāϤāĻŋāϟāĻž container āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁ āĻŦāϞ⧇ āĻĻ⧇āϝāĻŧāĨ¤

āϝ⧇āϕ⧋āύ⧋ container declare āĻ•āϰāĻž

std::vector<int> marks;
std::map<std::string, int> price;
  • std::vector, std::map: container-āĻāϰ āύāĻžāĻŽ, āϝ⧇āϟāĻž āφāϏ⧇ āĻ“āϰ āύāĻŋāĻœā§‡āϰ header āĻĨ⧇āϕ⧇ (<vector>, <map>)āĨ¤
  • <int>: āĻāϟāĻž āϕ⧋āύ type-āĻāϰ element āϧāϰ⧇ āϰāĻžāϖ⧇, angle bracket-āĻāϰ āϭ⧇āϤāϰ⧇ āϞ⧇āĻ–āĻžāĨ¤
  • <std::string, int>: map āĻœā§‹āĻĄāĻŧāĻž āϧāϰ⧇ āϰāĻžāϖ⧇, āϤāĻžāχ āĻ“āϰ āĻĻ⧁āχāϟāĻž type āϞāĻžāϗ⧇, key āφāϰ valueāĨ¤
  • marks, price: āύāĻžāĻŽāϟāĻž āϤ⧁āĻŽāĻŋ āĻŦāĻžāϛ⧋āĨ¤ āύāϤ⧁āύ container āĻļ⧁āϰ⧁ āĻšāϝāĻŧ āĻĢāĻžāρāĻ•āĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧāĨ¤

Sequence container: āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āϰ⧇āϖ⧇āĻ›, āϏ⧇āχ āĻ•ā§āϰāĻŽā§‡

āĻāχ āĻĒāĻžāρāϚāϟāĻž āϤ⧋āĻŽāĻžāϰ element-āϗ⧁āϞ⧋ āĻāĻ• āϏāĻžāϰāĻŋāϤ⧇ āϰāĻžāϖ⧇āĨ¤ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻšāϞ⧋, āϕ⧋āĻĨāĻžāϝāĻŧ āϝ⧋āĻ— āĻ•āϰāĻž āϏāĻ¸ā§āϤāĻž, āφāϰ size āĻŦāĻĻāϞāĻžāύ⧋ āϝāĻžāϝāĻŧ āĻ•āĻŋ āύāĻžāĨ¤

Example 1: vector, āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v;
    v.push_back(30);
    v.push_back(10);
    v.push_back(20);
    std::cout << "vector:";
    for (int x : v) std::cout << ' ' << x;
    std::cout << " | v[1] = " << v[1] << '\n';
}
vector: 30 10 20 | v[1] = 10

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "i āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϕ⧀ āφāϛ⧇?", āωāĻ¤ā§āϤāϰ āĻāĻ• āϧāĻžāĻĒ⧇, āϏāĻ™ā§āϗ⧇ āĻļ⧇āώ⧇ āϏāĻ¸ā§āϤāĻžāϝāĻŧ āϝ⧋āĻ— āĻ•āϰāĻžāĨ¤ āĻāϟāĻžāχ default container, āφāϰ āϏāĻŦāĻžāϰ āφāϗ⧇ āĻšāĻžāϤ āĻŦāĻžāĻĄāĻŧāĻžāĻŦ⧇ āĻāϟāĻžāϰ āĻĻāĻŋāϕ⧇āχāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 2: string, character-āĻāϰ āĻāĻ•āϟāĻž vector
#include <iostream>
#include <string>

int main()
{
    std::string s = "cat";
    s += "fish";
    s.push_back('!');
    std::cout << "string: " << s << " | size " << s.size() << " | s[0] = " << s[0] << '\n';
}
string: catfish! | size 8 | s[0] = c

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: vector-āĻāϰāϟāĻžāχ, āĻļ⧁āϧ⧁ āϞ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝāĨ¤ āϞ⧇āĻ–āĻž āύāĻŋāϝāĻŧ⧇ āĻ•āĻŋāϛ⧁ āĻ•āĻžāϜāĻ“ āĻāϟāĻž āϜāĻžāύ⧇, āϝ⧇āĻŽāύ += āĻĻāĻŋāϝāĻŧ⧇ āĻœā§‹āĻĄāĻŧāĻž āϞāĻžāĻ—āĻžāύ⧋ āφāϰ āĻāĻ•āϟāĻž āĻļāĻŦā§āĻĻ āĻ–ā§‹āρāϜāĻžāĨ¤ āϕ⧋āύ⧋ '\0' āϏāĻžāĻŽāϞāĻžāϤ⧇ āĻšāϝāĻŧ āύāĻž, āωāĻĒāĻšā§‡ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύ āϕ⧋āύ⧋ buffer-āĻ“ āύ⧇āχāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 3: array, āĻŽāĻžāĻĒ āĻŦāĻžāρāϧāĻž, āφāϰ āύāĻŋāĻœā§‡āϰ size āύāĻŋāĻœā§‡āχ āϜāĻžāύ⧇
#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> a = {30, 10, 20};
    std::cout << "array:";
    for (int x : a) std::cout << ' ' << x;
    std::cout << " | size is always " << a.size() << '\n';
}
array: 30 10 20 | size is always 3

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: i āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻž, āĻāĻŽāύ āĻāĻ•āϟāĻž āϏāĻ‚āĻ–ā§āϝāĻžāϰ āϜāĻ¨ā§āϝ, āϝ⧇āϟāĻž program āϞ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧāχ āϤ⧁āĻŽāĻŋ āϜāĻžāύ⧋āĨ¤ āĻāϟāĻž āĻāĻŽāύ āĻāĻ•āϟāĻž C array, āϝ⧇āϟāĻž āύāĻŋāĻœā§‡āϰ size āϜāĻžāύ⧇, āφāϰ āĻāĻ•āϟ⧁āĻ“ āĻŦāĻžāĻĄāĻŧ⧇ āύāĻžāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 4: deque, āĻĻ⧁āχ āĻŽāĻžāĻĨāĻžāϤ⧇āχ āϏāĻ¸ā§āϤāĻž
#include <deque>
#include <iostream>

int main()
{
    std::deque<int> d;
    d.push_back(30);
    d.push_front(10);
    d.push_back(20);
    std::cout << "deque:";
    for (int x : d) std::cout << ' ' << x;
    std::cout << " | d[0] = " << d[0] << '\n';
}
deque: 10 30 20 | d[0] = 10

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "āϝ⧇āϕ⧋āύ⧋ āĻŽāĻžāĻĨāĻžāϝāĻŧ āϝ⧋āĻ— āĻ•āϰ⧋ āĻŦāĻž āĻŦāĻžāĻĻ āĻĻāĻžāĻ“", āĻĒā§āϰāϤāĻŋāϟāĻž āĻāĻ• āϧāĻžāĻĒ⧇, āφāϰ i āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻžāĻ“ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤ deque (āωāĻšā§āϚāĻžāϰāĻŖ "āĻĄā§‡āĻ•", āĻŽāĻžāύ⧇ double-ended queue) āĻšāϞ⧋ āĻāĻŽāύ āĻāĻ•āϟāĻž vector, āϝāĻžāϰ āϏāĻžāĻŽāύ⧇ āϝ⧋āĻ— āĻ•āϰāĻžāϟāĻžāĻ“ āϏāĻ¸ā§āϤāĻžāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 5: list, āĻŽāĻžāĻāĻ–āĻžāύ⧇ āϏāĻ¸ā§āϤāĻž
#include <iostream>
#include <list>

int main()
{
    std::list<int> l = {30, 20};
    auto it = l.begin();
    ++it;
    l.insert(it, 10);
    std::cout << "list:";
    for (int x : l) std::cout << ' ' << x;
    std::cout << '\n';
}
list: 30 10 20

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "āĻ āĻŋāĻ• āĻāĻ–āĻžāύ⧇ āĻĸā§‹āĻ•āĻžāĻ“ āĻŦāĻž āĻŦāĻžāĻĻ āĻĻāĻžāĻ“", āϝ⧇āĻ–āĻžāύ⧇ āϤ⧁āĻŽāĻŋ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āĻĻāĻžāρāĻĄāĻŧāĻŋāϝāĻŧ⧇ āφāĻ›, āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ element āύāĻž āϏāϰāĻŋāϝāĻŧ⧇āĨ¤ "i āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϕ⧀ āφāϛ⧇?", āĻāχ āĻĒā§āϰāĻļā§āύ⧇āϰ āĻĻā§āϰ⧁āϤ āωāĻ¤ā§āϤāϰ āĻāϟāĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻž: āĻāϰ āϕ⧋āύ⧋ l[1]-āχ āύ⧇āχāĨ¤ C-āϤ⧇ āϤ⧁āĻŽāĻŋ āĻšāĻžāϤ⧇ āϝ⧇ linked list āϞāĻŋāϖ⧇āĻ›āĻŋāϞ⧇, āĻāϟāĻž āϏ⧇āϟāĻžāχāĨ¤

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

Adaptor: āĻāĻ• āĻĻāϰāϜāĻžāϝāĻŧ āĻĸā§‹āĻ•āĻž, āĻāĻ• āĻĻāϰāϜāĻžāϝāĻŧ āĻŦ⧇āϰ⧋āύ⧋

Adaptor āĻāĻ•āϟāĻž sequence container āύ⧇āϝāĻŧ, āφāϰ āĻ“āϰ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ—āϟāĻžāχ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āĻĢ⧇āϞ⧇āĨ¤ āϝ⧇ āĻŽāĻžāĻĨāĻžāϗ⧁āϞ⧋āϝāĻŧ āϏ⧇ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ, āĻļ⧁āϧ⧁ āϏ⧇āĻ–āĻžāύ⧇āχ āϤ⧁āĻŽāĻŋ āϝ⧋āĻ— āĻŦāĻž āĻŦāĻžāĻĻ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧋āĨ¤ āĻāϟāĻž āĻĻ⧁āĻ°ā§āĻŦāϞāϤāĻž āύāĻžāĨ¤ āϤ⧋āĻŽāĻžāϰ problem-āĻ āϝāĻĻāĻŋ āϏāĻŦ āϏāĻŽāϝāĻŧ āĻļ⧁āϧ⧁ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āύāϤ⧁āύ āĻŦāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒ⧁āϰāύ⧋ āϜāĻŋāύāĻŋāϏāϟāĻž āϞāĻžāϗ⧇, āϤāĻžāĻšāϞ⧇ adaptor āĻŦāĻžāĻ•āĻŋ āϏāĻŦ āϰāĻ•āĻŽ āϭ⧁āϞ āĻ…āϏāĻŽā§āĻ­āĻŦ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤

Example 6: stack, āĻļ⧇āώ⧇ āĻĸ⧁āĻ•āϞ⧇ āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ
#include <iostream>
#include <stack>

int main()
{
    std::stack<int> s;
    s.push(30);
    s.push(10);
    s.push(20);
    std::cout << "stack pops:";
    while (!s.empty()) {
        std::cout << ' ' << s.top();
        s.pop();
    }
    std::cout << '\n';
}
stack pops: 20 10 30

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "āϏāĻŦāĻžāϰ āĻļ⧇āώ⧇ āϕ⧀ āϝ⧋āĻ— āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ?"āĨ¤ āĻĨāĻžāϞāĻžāϰ āĻāĻ•āϟāĻž āĻ¸ā§āϤ⧂āĻĒ⧇āϰ āĻŽāϤ⧋: āĻļ⧇āώ⧇ āϝ⧇āϟāĻž āϰāĻžāĻ–āĻž āĻšāϝāĻŧ, āϏ⧇āϟāĻžāχ āφāϗ⧇ āύāĻžāĻŽā§‡āĨ¤ Undo button, āφāϰ C track-āĻ āϝ⧇ C call stack āĻĻ⧇āϖ⧇āĻ›āĻŋāϞ⧇, āĻĻ⧁āχāϟāĻžāχ āĻāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 7: queue, āφāϗ⧇ āĻĸ⧁āĻ•āϞ⧇ āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ
#include <iostream>
#include <queue>

int main()
{
    std::queue<int> q;
    q.push(30);
    q.push(10);
    q.push(20);
    std::cout << "queue pops:";
    while (!q.empty()) {
        std::cout << ' ' << q.front();
        q.pop();
    }
    std::cout << '\n';
}
queue pops: 30 10 20

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "āϏāĻŦāĻžāϰ āφāϗ⧇ āϕ⧀ āϝ⧋āĻ— āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ?"āĨ¤ āĻĻā§‹āĻ•āĻžāύ⧇āϰ āĻ•āĻžāωāĻ¨ā§āϟāĻžāϰ⧇āϰ āϞāĻžāχāύ⧇āϰ āĻŽāϤ⧋: āϝ⧇ āφāϗ⧇ āĻāϏ⧇āϛ⧇, āϏ⧇ āφāϗ⧇ āĻĒāĻžāϝāĻŧāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 8: priority_queue, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇
#include <iostream>
#include <queue>

int main()
{
    std::priority_queue<int> pq;
    pq.push(30);
    pq.push(10);
    pq.push(20);
    std::cout << "priority_queue pops:";
    while (!pq.empty()) {
        std::cout << ' ' << pq.top();
        pq.pop();
    }
    std::cout << '\n';
}
priority_queue pops: 30 20 10

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "āĻāχ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āϕ⧋āύāϟāĻž?", āύāϤ⧁āύ element āφāϏāϤ⧇ āĻĨāĻžāĻ•āϞ⧇āĻ“āĨ¤ āĻšāĻžāϏāĻĒāĻžāϤāĻžāϞ⧇āϰ emergency-āϰ āĻŽāϤ⧋: āϝāĻžāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāϰ⧁āϰāĻŋ, āϏ⧇ āφāϗ⧇ āϝāĻžāϝāĻŧ, āϕ⧇ āφāϗ⧇ āĻāϏ⧇āϛ⧇ āϤāĻžāϤ⧇ āĻ•āĻŋāϛ⧁ āϝāĻžāϝāĻŧ āφāϏ⧇ āύāĻžāĨ¤

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

Associative container: āĻŽāĻžāύ āĻĻāĻŋāϝāĻŧ⧇ āĻ–ā§‹āρāϜāĻž

āĻāϰāĻž āϤ⧋āĻŽāĻžāϰ āĻ•ā§āϰāĻŽ āĻāĻ•āĻĻāĻŽāχ āϰāĻžāϖ⧇ āύāĻžāĨ¤ āĻāϰāĻž element āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āϏāĻžāϜāĻžāϝāĻŧ, āϝāĻžāϤ⧇ "āĻāχ āĻŽāĻžāύāϟāĻž āĻ•āĻŋ āφāϛ⧇?" āĻĒā§āϰāĻļā§āύāϟāĻžāϰ āωāĻ¤ā§āϤāϰ āĻĻā§āϰ⧁āϤ āĻŽā§‡āϞ⧇āĨ¤ āĻ•ā§āϰāĻŽ āϰāĻžāĻ–āĻž container-āϗ⧁āϞ⧋ (set, map) element āϏāĻžāϜāĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇; unordered-āϗ⧁āϞ⧋ āĻ—āĻĄāĻŧ⧇ āφāϰ⧋ āĻĻā§āϰ⧁āϤ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻ•ā§āϰāĻŽāϟāĻž āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āϝāĻŧāĨ¤

Example 9: set āφāϰ multiset, āϏāĻžāϜāĻžāύ⧋ āφāϰ āĻ–ā§‹āρāϜāĻž āϝāĻžāϝāĻŧ
#include <iostream>
#include <set>

int main()
{
    std::set<int> s = {30, 10, 20, 10};
    std::multiset<int> m = {30, 10, 20, 10};
    std::cout << "set:";
    for (int x : s) std::cout << ' ' << x;
    std::cout << " | multiset:";
    for (int x : m) std::cout << ' ' << x;
    std::cout << " | is 20 in the set? " << s.count(20) << '\n';
}
set: 10 20 30 | multiset: 10 10 20 30 | is 20 in the set? 1

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "x āĻ•āĻŋ āφāϛ⧇?", āĻĻā§āϰ⧁āϤ, āφāϰ āϏāĻŦāĻ•āĻŋāϛ⧁ āϏāĻžāϜāĻžāύ⧋ āĻĨāĻžāϕ⧇āĨ¤ set āĻĒā§āϰāϤāĻŋāϟāĻž āĻŽāĻžāύ⧇āϰ āĻāĻ•āϟāĻžāχ āĻ•āĻĒāĻŋ āϰāĻžāϖ⧇, āϤāĻžāχ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ 10-āϟāĻž āĻŦāĻžāĻĻ āĻĒāĻĄāĻŧ⧇āϛ⧇āĨ¤ multiset āĻāĻ•āχ āĻŽāĻžāύ āĻŦāĻžāϰāĻŦāĻžāϰ āϰāĻžāϖ⧇āĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 10: map, āĻĒā§āϰāϤāĻŋāϟāĻž key-āĻāϰ āĻāĻ•āϟāĻž value
#include <iostream>
#include <map>
#include <string>

int main()
{
    std::map<std::string, int> price;
    price["tea"] = 30;
    price["bun"] = 10;
    price["egg"] = 20;
    std::cout << "map:";
    for (const auto& p : price) std::cout << ' ' << p.first << '=' << p.second;
    std::cout << " | egg costs " << price["egg"] << '\n';
}
map: bun=10 egg=20 tea=30 | egg costs 20

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: "āĻāχ key-āĻāϰ āϏāĻ™ā§āϗ⧇ āϕ⧀ āφāϛ⧇?"āĨ¤ map āĻšāϞ⧋ āĻ•āĻŋāϛ⧁ key-āĻāϰ āĻāĻ•āϟāĻž set, āĻĒā§āϰāϤāĻŋāϟāĻž key āĻāĻ•āϟāĻž āĻ•āϰ⧇ value āĻŦāϝāĻŧ⧇ āĻŦ⧇āĻĄāĻŧāĻžāϝāĻŧ, āφāϰ āϏāĻŦ key āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϏāĻžāϜāĻžāύ⧋ āĻĨāĻžāϕ⧇: bun āϏāĻŦāĻžāϰ āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ, āĻ•āĻžāϰāĻŖ āĻŦāĻ°ā§āĻŖāĻŽāĻžāϞāĻžāϝāĻŧ āĻ“āϟāĻžāχ āĻĒā§āϰāĻĨāĻŽāĨ¤ multimap-āĻ āĻāĻ•āϟāĻž key āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 11: unordered_set āφāϰ unordered_map, āϕ⧋āύ⧋ āĻ•ā§āϰāĻŽ āύ⧇āχ, āĻ—āĻĄāĻŧ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>

int main()
{
    std::unordered_set<int> seen = {30, 10, 20};
    std::unordered_map<std::string, int> stock = {{"tea", 30}, {"bun", 10}};
    std::cout << "unordered_set:";
    for (int x : seen) std::cout << ' ' << x;
    std::cout << " | is 10 seen? " << seen.count(10);
    std::cout << " | buns in stock: " << stock["bun"] << '\n';
}
unordered_set: 20 10 30 | is 10 seen? 1 | buns in stock: 10

āĻ“āϰ āĻĒā§āϰāĻļā§āύ: set āφāϰ map-āĻāϰāϟāĻžāχ, āĻ—āĻĄāĻŧ⧇ āφāϰ⧋ āĻĻā§āϰ⧁āϤ, āϝāĻ–āύ element-āϗ⧁āϞ⧋ āĻ•āĻ–āύ⧋ āĻ•ā§āϰāĻŽā§‡ āϞāĻžāϗ⧇ āύāĻžāĨ¤ āĻāϰāĻž āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āĻ›āĻžāĻĒ⧇, āϏ⧇āϟāĻž āφāϏ⧇ hashing āĻĨ⧇āϕ⧇, āϤ⧋āĻŽāĻžāϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āύāĻž, sort āĻĨ⧇āϕ⧇āĻ“ āύāĻžāĨ¤ āĻ…āĻ¨ā§āϝ compiler-āĻāϰ library āĻšāϝāĻŧāϤ⧋ āĻ…āĻ¨ā§āϝ āĻ•ā§āϰāĻŽā§‡ āĻ›āĻžāĻĒāĻŦ⧇, āϤāĻžāχ āĻāχ āĻ•ā§āϰāĻŽā§‡āϰ āωāĻĒāϰ āĻ•āĻ–āύ⧋ āĻ­āϰāϏāĻž āϕ⧋āϰ⧋ āύāĻžāĨ¤

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

āĻ–āϰāĻšā§‡āϰ table

āĻāχ track-āĻ āĻ–āϰāϚ āϞ⧇āĻ–āĻž āĻšāϝāĻŧ big-O notation-āĻ, āϝ⧇āĻ–āĻžāύ⧇ n āĻšāϞ⧋ container-āĻ āĻ•āϝāĻŧāϟāĻž element āφāϛ⧇āĨ¤ āφāĻĒāĻžāϤāϤ āĻāϰ āϤāĻŋāύāϟāĻž āϜāĻžāύāϞ⧇āχ āϚāϞāĻŦ⧇, āύāĻŋāĻšā§‡ āϏ⧋āϜāĻž āĻ­āĻžāώāĻžāϝāĻŧ āĻŦāϞāĻž āĻšāϞ⧋āĨ¤

  • O(1), constant: n āĻŦāĻžāĻĄāĻŧāϞ⧇āĻ“ āĻ–āϰāϚ āĻŦāĻžāĻĄāĻŧ⧇ āύāĻžāĨ¤ 10āϟāĻž element-āĻ āĻāĻ• āϧāĻžāĻĒ, āĻāĻ• āϕ⧋āϟāĻŋ element-āĻāĻ“ āĻāĻ• āϧāĻžāĻĒāĨ¤
  • O(log n), logarithmic: āĻ–āϰāϚ āĻŦāĻžāĻĄāĻŧ⧇ āϧ⧀āϰ⧇āĨ¤ n āĻĻā§āĻŦāĻŋāϗ⧁āĻŖ āĻšāϞ⧇ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āĻāĻ• āϧāĻžāĻĒ āĻŦāĻžāĻĄāĻŧ⧇, āϤāĻžāχ āĻĻāĻļ āϞāĻžāĻ– element-āĻ āϞāĻžāϗ⧇ āĻĒā§āϰāĻžāϝāĻŧ 20 āϧāĻžāĻĒāĨ¤
  • O(n), linear: n āϝāϤ āĻŦāĻžāĻĄāĻŧ⧇, āĻ–āϰāϚāĻ“ āϤāϤ āĻŦāĻžāĻĄāĻŧ⧇āĨ¤ āĻĻāĻļ āϗ⧁āĻŖ element, āĻĻāĻļ āϗ⧁āĻŖ āĻ•āĻžāϜāĨ¤
n 1 āĻĨ⧇āϕ⧇ 1,000,000 āĻĒāĻ°ā§āϝāĻ¨ā§āϤ, O(1), O(log n) āφāϰ O(n) 1 10 100 1,000 10,000 100,000 1,000,000 n, āĻŽāĻžāύ⧇ element-āĻāϰ āϏāĻ‚āĻ–ā§āϝāĻž (āĻĒā§āϰāϤāĻŋāϟāĻž āĻĻāĻžāĻ— āφāϗ⧇āϰāϟāĻžāϰ 10 āϗ⧁āĻŖ) 1 100 10,000 1,000,000 āϧāĻžāĻĒ (āĻĒā§āϰāϤāĻŋāϟāĻž āĻĻāĻžāĻ— āφāϗ⧇āϰāϟāĻžāϰ 100 āϗ⧁āĻŖ) O(n): 1,000,000 āϧāĻžāĻĒ O(log n): āĻĒā§āϰāĻžāϝāĻŧ 20 āϧāĻžāĻĒ O(1): 1 āϧāĻžāĻĒ
āĻ›āĻŦāĻŋ 1āĨ¤ 1 āĻĨ⧇āϕ⧇ 1,000,000 element āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϤāĻŋāύāϟāĻž āĻ–āϰāϚāĨ¤ āϤāĻŋāύāϟāĻžāϕ⧇āχ āĻāĻ• āĻ›āĻŦāĻŋāϤ⧇ āϧāϰāĻžāϤ⧇ āĻĻ⧁āχāϟāĻž āĻ…āĻ•ā§āώāχ āĻĻāĻļ⧇āϰ āϗ⧁āϪ⧇ āĻŸā§‡āύ⧇ āϞāĻŽā§āĻŦāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĻāĻļ āϞāĻžāĻ– element-āĻ O(log n) āĻĒā§āϰāĻžāϝāĻŧ 20 āϧāĻžāĻĒ, āφāϰ O(n) āĻĻāĻļ āϞāĻžāĻ–āĨ¤

āĻāĻŦāĻžāϰ table-āϟāĻžāĨ¤ āĻāĻ•āϟāĻž āϏāĻžāϰāĻŋ āĻāĻ­āĻžāĻŦ⧇ āĻĒāĻĄāĻŧā§‹: "āĻāχ container-āϕ⧇ āĻāχ āĻĒā§āϰāĻļā§āύ āĻ•āϰāϞ⧇ āĻ–āϰāϚ āĻāϤāϟāĻž"āĨ¤ āĻāĻ•āϟāĻž dash (-) āĻŽāĻžāύ⧇ container-āϟāĻž āĻ“āχ āĻ•āĻžāϜāϟāĻž āĻĻ⧇āϝāĻŧāχ āύāĻžāĨ¤ āĻļ⧇āώ āϤāĻŋāύāϟāĻž āϏāĻžāϰāĻŋāϤ⧇ "āϝ⧋āĻ—" āĻ•āϰāĻžāϰ āϕ⧋āύ⧋ āĻļ⧇āώ āĻŦāĻž āϏāĻžāĻŽāύ⧇ āύ⧇āχāĨ¤ āĻāĻ•āϟāĻž element āϝāĻžāϝāĻŧ āĻ“āϰ āĻŽāĻžāύ āϝ⧇āĻ–āĻžāύ⧇ āĻŦāϞ⧇ āϏ⧇āĻ–āĻžāύ⧇, āϤāĻžāχ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻ–āϰāϚ āĻŦāϏāĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇ āĻĒā§āϰāĻĨāĻŽ column-āĻāĨ¤ Amortised āĻŽāĻžāύ⧇ "āĻ…āύ⧇āĻ•āĻŦāĻžāϰ call āĻ•āϰāϞ⧇ āĻ—āĻĄāĻŧ⧇"; Lesson 5 āĻāϟāĻž āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞāĻŦ⧇āĨ¤

ContainerāĻļ⧇āώ⧇ āϝ⧋āĻ—āϏāĻžāĻŽāύ⧇ āϝ⧋āĻ—āĻŽāĻžāĻā§‡ āϝ⧋āĻ—āĻāĻ•āϟāĻž āĻŽāĻžāύ āĻ–ā§‹āρāϜāĻži āύāĻŽā§āĻŦāϰ elementāϏāĻžāϜāĻžāύ⧋ āĻ•ā§āϰāĻŽā§‡ āĻĒ⧁āϰ⧋āϟāĻž āĻ˜ā§‹āϰāĻž
vector, stringO(1) amortisedO(n)O(n)O(n)O(1)āύāĻž
array---O(n)O(1)āύāĻž
dequeO(1)O(1)O(n)O(n)O(1)āύāĻž
listO(1)O(1)O(1), āϝ⧇āĻ–āĻžāύ⧇ āĻĻāĻžāρāĻĄāĻŧāĻŋāϝāĻŧ⧇ āφāĻ›O(n)O(n)āύāĻž
stackO(1), āĻļ⧁āϧ⧁ top-āĻ----āύāĻž
queueO(1)----āύāĻž
priority_queueO(log n), āύāĻŋāĻœā§‡āϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻ—āĻŋāϝāĻŧ⧇ āĻŦāϏ⧇--āĻļ⧁āϧ⧁ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž, O(1)-āύāĻž
set, map āφāϰ āĻ“āĻĻ⧇āϰ multi āϰ⧂āĻĒO(log n), āϏāĻžāϜāĻžāύ⧋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻ—āĻŋāϝāĻŧ⧇ āĻŦāϏ⧇--O(log n)-āĻšā§āϝāĻžāρ, āϏāĻŦāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ O(n)
unordered_set, unordered_mapāĻ—āĻĄāĻŧ⧇ O(1)--āĻ—āĻĄāĻŧ⧇ O(1)-āύāĻž

Table-āĻāϰ āĻĻ⧁āχāϟāĻž āϞāĻžāχāύ āφāϰ⧇āĻ•āĻŦāĻžāϰ āĻĻ⧇āĻ–āĻžāϰ āĻŽāϤ⧋āĨ¤ list āĻŽāĻžāĻāĻ–āĻžāύ⧇ O(1)-āĻ āϝ⧋āĻ— āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻļ⧁āϧ⧁ āϤāĻ–āύāχ, āϝāĻ–āύ āϤ⧁āĻŽāĻŋ āĻ“āĻ–āĻžāύ⧇ āĻĻāĻžāρāĻĄāĻŧāĻŋāϝāĻŧ⧇ āφāĻ›; āϜāĻžāϝāĻŧāĻ—āĻžāϟāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻšā§‡āρāĻŸā§‡ āϝ⧇āϤ⧇ āϞāĻžāϗ⧇ O(n)āĨ¤ āφāϰ unordered container-āϗ⧁āϞ⧋āϰ "āĻ—āĻĄāĻŧ⧇" āĻ•āĻĨāĻžāϟāĻž āĻāĻ•āϟāĻž āϏāĻ¤ā§āϝāĻŋāĻ•āĻžāϰ⧇āϰ āĻļāĻ°ā§āϤ: āĻ–āĻžāϰāĻžāĻĒ data āĻĒ⧇āϞ⧇ āĻ“āĻĻ⧇āϰ O(1) āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ O(n)āĨ¤ āϏ⧇āχ data āĻĻ⧇āĻ–āϤ⧇ āϕ⧇āĻŽāύ, Module 10 āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤

āϤāĻžāχ "āϕ⧋āύāϟāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ?" āĻĒā§āϰāĻļā§āύ⧇āϰ āϕ⧋āύ⧋ āωāĻ¤ā§āϤāϰ āύ⧇āχāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ "key āĻĻāĻŋāϝāĻŧ⧇ āĻ–ā§‹āρāϜāĻžāϝāĻŧ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ, āϏāĻžāϜāĻžāύ⧋ āĻ•ā§āϰāĻŽā§‡?" āĻĒā§āϰāĻļā§āύ⧇āϰ āĻāĻ•āϟāĻž āωāĻ¤ā§āϤāϰ āφāϛ⧇: mapāĨ¤ Amara-āϰ āĻĒ⧁āϰ⧋ āĻ•āĻĨāĻžāϟāĻž āĻāϟāĻžāχāĨ¤

āĻāϟāĻž āϕ⧋āĻĨāĻžāϝāĻŧ āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āϛ⧇

  • Linux-āĻāϰ CFS scheduler. Kernel 2.6.23 āĻĨ⧇āϕ⧇ 6.5 āĻĒāĻ°ā§āϝāĻ¨ā§āϤ scheduler āϚāϞāĻžāϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ task-āϗ⧁āϞ⧋ āĻāĻ•āϟāĻž red-black tree-āϤ⧇ āϰāĻžāĻ–āϤ, āϕ⧇ āĻ•āϤāϟāĻž CPU āϏāĻŽāϝāĻŧ āĻ–āϰāϚ āĻ•āϰ⧇āϛ⧇ āϏ⧇āχ āĻ•ā§āϰāĻŽā§‡āĨ¤ GCC-āϰ library āĻ āĻŋāĻ• āĻāχ balanced tree-āϰ āωāĻĒāϰ⧇āχ std::set āφāϰ std::map āĻŦāĻžāύāĻžāϝāĻŧāĨ¤
  • Redis sorted set. Game-āĻāϰ leaderboard āĻŦāĻžāύāĻžāύ⧋āϰ āĻšā§‡āύāĻž āωāĻĒāĻžāϝāĻŧāĨ¤ āĻāϰāĻž member-āĻĻ⧇āϰ score āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϏāĻžāϜāĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇, āφāĻŦāĻžāϰ āύāĻžāĻŽ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϜāύ member-āϕ⧇ āĻĻā§āϰ⧁āϤ āϖ⧁āρāĻœā§‡āĻ“ āĻĻ⧇āϝāĻŧāĨ¤ āĻāχ āĻĻ⧁āχāϟāĻž āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰāχ āĻĻ⧇āϝāĻŧ āĻāĻ•āϟāĻž map, āφāϰ Redis āĻāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻž skip list āφāϰ āĻāĻ•āϟāĻž hash tableāĨ¤
  • Hunspell. LibreOffice āφāϰ Firefox āϝ⧇ spell checker āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϏ⧇āϟāĻž āύāĻŋāĻœā§‡āϰ dictionary āĻāĻ•āϟāĻž hash table-āĻ load āĻ•āϰ⧇āĨ¤ "āĻāχ āĻļāĻŦā§āĻĻāϟāĻž āĻ•āĻŋ dictionary-āϤ⧇ āφāϛ⧇?", āĻāϟāĻžāχ unordered_set-āĻāϰ āĻĒā§āϰāĻļā§āύ, āφāϰ āϤ⧁āĻŽāĻŋ āϝāϤ āĻļāĻŦā§āĻĻ āϟāĻžāχāĻĒ āĻ•āϰ⧋, āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇ āĻāϟāĻž āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
  • Emacs āφāϰ VS Code. Text editor āϏāĻžāϰāĻžāĻ•ā§āώāĻŖ āϞ⧇āĻ–āĻžāϰ āĻŽāĻžāĻāĻ–āĻžāύ⧇ āĻ•āĻŋāϛ⧁ āĻĸā§‹āĻ•āĻžāϝāĻŧ, āφāϰ āĻ āĻŋāĻ• āĻāχ āĻāĻ•āϟāĻž āĻ•āĻžāĻœā§‡āχ āϏāĻžāϧāĻžāϰāĻŖ vector āϧ⧀āϰāĨ¤ Emacs āϰāĻžāϖ⧇ āĻāĻ•āϟāĻž gap buffer, āφāϰ VS Code āĻāĻ•āϟāĻž piece tree, āĻĻ⧁āχāϟāĻžāχ āĻŦāĻžāύāĻžāύ⧋ āĻ“āχ āĻĸā§‹āĻ•āĻžāύ⧋āϟāĻž āϏāĻ¸ā§āϤāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝāĨ¤

āϝ⧇ āϭ⧁āϞāϗ⧁āϞ⧋ āϏāĻŦāĻžāχ āĻ•āϰ⧇

ā§§. āϝ⧇ container-āĻ āϜāĻžāϝāĻŧāĻ—āĻžāϰ āύāĻŽā§āĻŦāϰ āύ⧇āχ, āϏ⧇āĻ–āĻžāύ⧇ index āĻĻāĻŋāϝāĻŧ⧇ āĻĸā§‹āĻ•āĻžāĨ¤

std::stack<int> s;
s.push(1);
std::cout << s[0] << "\n";

GCC 12 āĻŦāϞ⧇ error: no match for 'operator[]' (operand types are 'std::stack<int>' and 'int')āĨ¤ Stack āĻļ⧁āϧ⧁ āĻ“āϰ top āĻĻ⧇āĻ–āĻžāϝāĻŧ, s.top() āĻĻāĻŋāϝāĻŧ⧇āĨ¤ list, set āφāϰ queue-āĻāϰ āĻŦ⧇āϞāĻžāϤ⧇āĻ“ āĻāĻ•āχ message āφāϏ⧇āĨ¤ i āύāĻŽā§āĻŦāϰ āϜāĻžāϝāĻŧāĻ—āĻž āϞāĻžāĻ—āϞ⧇ āϤ⧋āĻŽāĻžāϰ āϞāĻžāĻ—āĻŦ⧇ vector, deque āĻŦāĻž arrayāĨ¤

⧍. Unordered container āϏāĻžāϜāĻžāύ⧋ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻŦ⧇āϰ⧋āĻŦ⧇, āĻāϟāĻž āφāĻļāĻž āĻ•āϰāĻžāĨ¤

Example 11-āĻ āĻĸā§‹āĻ•āĻžāύ⧋ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ 30, 10, 20, āφāϰ āĻ›āĻžāĻĒāĻž āĻšāϞ⧋ 20 10 30āĨ¤ āĻāχ āĻ•ā§āϰāĻŽāϟāĻž āϤ⧋āĻŽāĻžāϰāĻ“ āύāĻž, āϏāĻžāϜāĻžāύ⧋āĻ“ āύāĻž, āφāϰ container āĻŦāĻĄāĻŧ āĻšāϞ⧇ āĻāϟāĻž āĻŦāĻĻāϞ⧇āĻ“ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ Output āϝāĻĻāĻŋ āĻ•ā§āϰāĻŽā§‡ āϞāĻžāϗ⧇āχ, set āĻŦāĻž map āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧋, āύāϝāĻŧāϤ⧋ element-āϗ⧁āϞ⧋ āĻāĻ•āϟāĻž vector-āĻ āĻ•āĻĒāĻŋ āĻ•āϰ⧇ sort āĻ•āϰ⧋āĨ¤

ā§Š. āĻļ⧁āϧ⧁ āĻ—āϤāĻŋ āĻĻ⧇āϖ⧇ āĻŦāĻžāĻ›āĻžāĨ¤

Kenji āĻāĻ•āϟāĻž leaderboard āĻŦāĻžāύāĻžāϝāĻŧ unordered_map āĻĻāĻŋāϝāĻŧ⧇, āĻ•āĻžāϰāĻŖ āĻ“āϟāĻž "āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ"āĨ¤ āϤāĻžāϰāĻĒāϰ āĻĻ⧇āϖ⧇, āĻĒā§āϰāϤāĻŋāϟāĻž game-āĻāϰ āĻĒāϰ āϤāĻžāϕ⧇ āϏ⧇āϰāĻž āĻĻāĻļāϜāύāϕ⧇ āĻ•ā§āϰāĻŽ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻ›āĻžāĻĒāĻžāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĻā§āϰ⧁āϤ āĻ–ā§‹āρāϜāĻž āϤāĻžāϰ āϕ⧋āύ⧋ āĻ•āĻžāĻœā§‡ āφāϏ⧇ āύāĻž, āφāϰ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻĒ⧁āϰ⧋ board sort āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤ Table āϝ⧇āĻŽāύ āĻ•āϰ⧇, āϤ⧁āĻŽāĻŋāĻ“ āĻĒā§āϰāĻļā§āύ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧋, container āύāĻŋāĻœā§‡āχ āĻŦāĻžāĻ›āĻžāχ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤

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

āĻĒāĻžāρāϚāϟāĻž āĻ•āĻžāϜāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻž container āĻŦāĻžāϛ⧋, āφāϰ āĻāχ lesson-āĻāϰ āϕ⧋āύ āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āϏ⧇āϟāĻž āĻĻ⧇āϝāĻŧ, āϤāĻžāϰ āύāĻžāĻŽ āĻŦāϞ⧋āĨ¤

  1. āĻāĻ•āϟāĻž text editor-āĻāϰ Undo buttonāĨ¤
  2. āĻāĻ•āϟāĻžāχ printer, āφāϰ āϤāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻžāϝāĻŧ āĻĨāĻžāĻ•āĻž print job-āϗ⧁āϞ⧋āĨ¤
  3. āĻšāĻžāϏāĻĒāĻžāϤāĻžāϞ⧇āϰ emergency āĻ āĻŋāĻ• āĻ•āϰāϛ⧇, āĻāϰāĻĒāϰ āĻ•āĻžāϕ⧇ āĻĻ⧇āĻ–āĻž āĻšāĻŦ⧇āĨ¤
  4. āĻāĻ• āϕ⧋āϟāĻŋ username-āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻž āύāĻžāĻŽ āφāϗ⧇āχ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇ āϗ⧇āϛ⧇ āĻ•āĻŋ āύāĻž āĻĻ⧇āĻ–āĻž, āϕ⧋āύ⧋ āĻ•ā§āϰāĻŽā§‡āϰ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχāĨ¤
  5. āĻāĻŽāύ āĻāĻ•āϟāĻž dictionary, āϝ⧇āϟāĻž A āĻĨ⧇āϕ⧇ Z āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒā§āϰāϤāĻŋāϟāĻž āĻļāĻŦā§āĻĻ āϤāĻžāϰ āĻŽāĻžāύ⧇ āϏāĻš āĻ›āĻžāĻĒ⧇āĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰ⧋, āĻāϰāĻĒāϰ āϤāĻžāϰ āϕ⧋āύ āϜāĻŋāύāĻŋāϏāϟāĻž āϞāĻžāĻ—āĻŦ⧇: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āύāϤ⧁āύāϟāĻž, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒ⧁āϰāύ⧋āϟāĻž, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž, āύāĻžāĻŽ āϧāϰ⧇ āĻāĻ•āϟāĻž, āύāĻžāĻ•āĻŋ āϏāĻŦāϗ⧁āϞ⧋ āĻ•ā§āϰāĻŽā§‡āĨ¤

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

Example 1, 6, 7, 8 āφāϰ 9-āĻāϰ output āĻĻ⧇āĻ–ā§‹āĨ¤ āĻĒāĻžāρāϚāϟāĻž container-āϕ⧇āχ 30, 10, 20 āĻ āĻŋāĻ• āĻāχ āĻ•ā§āϰāĻŽā§‡ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ• āĻŦāĻžāĻ•ā§āϝ⧇ āϞ⧇āĻ–ā§‹, āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞ⧋ āϕ⧇āύ āĻ“āχ āĻ•ā§āϰāĻŽā§‡ āĻŦ⧇āϰ⧋āϞāĨ¤

āύāĻŋāĻœā§‡ āϝāĻžāϚāĻžāχ āĻ•āϰ⧋āĨ¤ āĻĒāĻžāρāϚāϟāĻž āφāϞāĻžāĻĻāĻž āĻ•āĻžāϰāĻŖ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āĻ•āĻĨāĻž: āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āϝ⧋āĻ— āĻ•āϰ⧇āĻ›, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āύāϤ⧁āύāϟāĻž āφāϗ⧇, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒ⧁āϰāύ⧋āϟāĻž āφāϗ⧇, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇, āφāϰ āϏāĻžāϜāĻžāύ⧋āĨ¤

āĻ…āύ⧁āĻļā§€āϞāύ ⧍āĻŽāĻžāĻāĻžāϰāĻŋ

Example 10 Playground-āĻ āĻ–ā§‹āϞ⧋āĨ¤ Egg-āĻāϰ āϞāĻžāχāύ⧇āϰ āĻĒāϰ⧇ āϚāϤ⧁āĻ°ā§āĻĨ āĻāĻ•āϟāĻž item āϝ⧋āĻ— āĻ•āϰ⧋: price["apple"] = 50;āĨ¤ āϚāĻžāϞāĻžāύ⧋āϰ āφāϗ⧇ āϞāĻŋāϖ⧇ āϰāĻžāĻ–ā§‹, āϕ⧋āύ āϞāĻžāχāύāϟāĻž āφāĻļāĻž āĻ•āϰāĻ›āĨ¤

āύāĻŋāϝāĻŧāĻŽāĨ¤ āϤāĻžāϰāĻĒāϰ std::map āĻŦāĻĻāϞ⧇ std::unordered_map āĻ•āϰ⧋, āφāϰ #include <unordered_map> āϝ⧋āĻ— āĻ•āϰ⧋āĨ¤ āφāĻŦāĻžāϰ āϚāĻžāϞāĻžāĻ“, āφāϰ āĻ•ā§āϰāĻŽāϟāĻž āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–ā§‹āĨ¤

āύāĻŋāĻœā§‡ āϝāĻžāϚāĻžāχ āĻ•āϰ⧋āĨ¤ Map-āĻ apple=50 āϏāĻŦāĻžāϰ āφāϗ⧇ āφāϏ⧇āĨ¤ Unordered map-āĻ āĻ•ā§āϰāĻŽāϟāĻž hashing āϝāĻž āĻĻ⧇āϝāĻŧ āϤāĻžāχ, āφāϰ āϏ⧇āϟāĻž āĻŦāĻ°ā§āĻŖāĻŽāĻžāϞāĻžāϰ āĻ•ā§āϰāĻŽ āύāĻžāĨ¤

āĻ…āύ⧁āĻļā§€āϞāύ ā§ŠāĻ•āĻ āĻŋāύ

āĻāĻ•āϟāĻž web browser-āĻ āĻāĻ•āϟāĻž Back button āφāϰ āĻāĻ•āϟāĻž Forward button āφāϛ⧇āĨ¤ āύāϤ⧁āύ page-āĻ āϗ⧇āϞ⧇ Forward-āĻāϰ history āĻŽā§āϛ⧇ āϝāĻžāϝāĻŧāĨ¤ āϕ⧋āύ container, āĻŦāĻž āϕ⧋āύ āϕ⧋āύ container āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇ āĻŦāĻžāϛ⧋, āφāϰ table āĻĻ⧇āĻ–āĻŋāϝāĻŧ⧇ āĻāĻ• āĻ…āύ⧁āĻšā§āϛ⧇āĻĻ⧇ āϤ⧋āĻŽāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻāϟāĻž āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞ⧋āĨ¤

āύāĻŋāϝāĻŧāĻŽāĨ¤ Back āϚāĻžāĻĒāϞ⧇, Forward āϚāĻžāĻĒāϞ⧇ āφāϰ āύāϤ⧁āύ page-āĻ āϗ⧇āϞ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž container-āĻāϰ āϕ⧀ āĻšāϝāĻŧ, āϏ⧇āϟāĻž āĻŦāϞ⧋āĨ¤

āύāĻŋāĻœā§‡ āϝāĻžāϚāĻžāχ āĻ•āϰ⧋āĨ¤ āĻāĻ•āϟāĻž āĻ­āĻžāϞ⧋ āωāĻ¤ā§āϤāϰ āĻšāϞ⧋ āĻĻ⧁āχāϟāĻž stack: Back āĻāĻ•āϟāĻž āĻĨ⧇āϕ⧇ pop āĻ•āϰ⧇ āĻ…āĻ¨ā§āϝāϟāĻžāϝāĻŧ push āĻ•āϰ⧇, āφāϰ āύāϤ⧁āύ page Forward stack-āϟāĻž āĻ–āĻžāϞāĻŋ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāĻ•āϟāĻž position āϏāĻš āĻāĻ•āϟāĻž deque-āĻ“ āϚāϞ⧇āĨ¤ āϝ⧇āĻ­āĻžāĻŦ⧇āχ āĻ•āϰ⧋, āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•āĻžāϜ O(1)āĨ¤

āϝ⧇ āĻĒā§āϰāĻļā§āύāϗ⧁āϞ⧋ āϏāĻŦāĻžāϰ āĻŽāύ⧇ āφāϏ⧇

  • āĻāχ table āĻ•āĻŋ āĻŽā§āĻ–āĻ¸ā§āĻĨ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇?

    āύāĻžāĨ¤ Module 10 āĻļ⧇āώ āĻšāϤ⧇ āĻšāϤ⧇ āϤ⧁āĻŽāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻž āϏāĻžāϰāĻŋ āϜāĻžāύāĻŦ⧇, āĻ•āĻžāϰāĻŖ āϤāĻ–āύ āĻŦ⧁āĻāĻŦ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž container āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻžāύāĻžāύ⧋āĨ¤ āφāĻĒāĻžāϤāϤ page-āϟāĻž āĻ–ā§‹āϞāĻž āϰāĻžāĻ–ā§‹, āφāϰ āĻŦāĻžāĻ›āĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻž āĻĻ⧇āϖ⧇ āύāĻžāĻ“āĨ¤

  • stack āφāϰ queue-āϕ⧇ container āύāĻž āĻŦāϞ⧇ adaptor āĻŦāϞ⧇ āϕ⧇āύ?

    āĻ•āĻžāϰāĻŖ āĻ“āϰāĻž āύāĻŋāĻœā§‡āϰāĻž āĻ•āĻŋāϛ⧁āχ āϧāϰ⧇ āϰāĻžāϖ⧇ āύāĻžāĨ¤ Default āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāĻ•āϟāĻž stack-āĻāϰ āύāĻŋāĻšā§‡ āφāϏāϞ⧇ āĻāĻ•āϟāĻž deque āĻĨāĻžāϕ⧇, top āĻ›āĻžāĻĄāĻŧāĻž āĻŦāĻžāĻ•āĻŋ āϏāĻŦ āĻ•āĻžāϜ āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰāĻžāĻ–āĻžāĨ¤ āύāĻŋāĻšā§‡ āϕ⧀ āĻĨāĻžāĻ•āĻŦ⧇ āϏ⧇āϟāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻ›āĻŦ⧇, Module 6 āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤

  • unordered_map āϝāĻĻāĻŋ O(1) āφāϰ map O(log n) āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ map āϕ⧇āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ?

    āĻ•āĻžāϰāĻŖ map āĻ“āϰ key-āϗ⧁āϞ⧋ āϏāĻžāϜāĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇, āφāϰ āĻ•āĻŋāϛ⧁ āĻ•āĻžāĻœā§‡ āĻ“āχ āĻ•ā§āϰāĻŽāϟāĻž āϞāĻžāϗ⧇āĨ¤ āϤāĻžāĻ›āĻžāĻĄāĻŧāĻž āĻĻāĻļ āϞāĻžāĻ– key-āĻāϰ āϜāĻ¨ā§āϝ O(log n) āĻŽāĻžāύ⧇ āĻĒā§āϰāĻžāϝāĻŧ 20 āϧāĻžāĻĒ, āϝ⧇āϟāĻž āĻāĻŽāύāĻŋāϤ⧇āχ āϖ⧁āĻŦ āĻĻā§āϰ⧁āϤāĨ¤ āφāϰ table āϝ⧇āĻŽāύ āĻŦāϞ⧇, unordered map-āĻāϰ O(1) āĻļ⧁āϧ⧁ āĻāĻ•āϟāĻž āĻ—āĻĄāĻŧāĨ¤

  • std::string āĻ•āĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻāĻ•āϟāĻž container?

    āĻāϟāĻž container-āĻāϰ āĻŽāϤ⧋āχ āφāϚāϰāĻŖ āĻ•āϰ⧇āĨ¤ Character-āϗ⧁āϞ⧋ āĻāĻ• āϏāĻžāϰāĻŋāϤ⧇ āϧāϰ⧇ āϰāĻžāϖ⧇, āĻāϰ begin() āφāϰ end() āφāϛ⧇, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž algorithm āĻ“āϟāĻžāϰ āωāĻĒāϰ āϚāϞ⧇āĨ¤ āĻāϟāĻž āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āĻĒāϰ⧇ STL āĻĒāϰāĻŋāĻŦāĻžāϰ⧇ āϝ⧋āĻ— āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāϜāĻ¨ā§āϝāχ āĻ“āϟāĻžāϰ āĻ•āĻžāϛ⧇ āϞ⧇āĻ–āĻž āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāĻœā§‡āϰ āĻŦāĻžāĻĄāĻŧāϤāĻŋ āĻ•āĻŋāϛ⧁ function āφāϛ⧇, āϝ⧇āϗ⧁āϞ⧋ vector-āĻāϰ āύ⧇āχāĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž

  • Sequence container āϤ⧋āĻŽāĻžāϰ āĻ•ā§āϰāĻŽ āϰāĻžāϖ⧇; adaptor āĻļ⧁āϧ⧁ āĻāĻ• āĻŦāĻž āĻĻ⧁āχ āĻŽāĻžāĻĨāĻž āĻ–ā§‹āϞāĻž āϰāĻžāϖ⧇; associative container āĻŽāĻžāύ āĻĻ⧇āϖ⧇ āϏāĻžāϜāĻžāϝāĻŧāĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻž container āĻāĻ•āϟāĻž āĻĒā§āϰāĻļā§āύ⧇āϰ āĻĻā§āϰ⧁āϤ āωāĻ¤ā§āϤāϰ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻŦāĻžāύāĻžāύ⧋, āφāϰ āϏāĻŦ āĻ•āĻžāĻœā§‡ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āĻāĻŽāύ āϕ⧋āύ⧋ container āύ⧇āχāĨ¤
  • O(1) n-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻŦāĻžāĻĄāĻŧ⧇ āύāĻž, O(log n) āϧ⧀āϰ⧇ āĻŦāĻžāĻĄāĻŧ⧇, O(n) n-āĻāϰ āϏāĻ™ā§āϗ⧇ āϏāĻŽāĻžāύ āϤāĻžāϞ⧇ āĻŦāĻžāĻĄāĻŧ⧇āĨ¤
  • āĻ•ā§āϰāĻŽ āϰāĻžāĻ–āĻž container (set, map) element āϏāĻžāϜāĻŋāϝāĻŧ⧇ āϰāĻžāϖ⧇; unordered-āϗ⧁āϞ⧋ āĻ—āĻĄāĻŧ⧇ āĻĻā§āϰ⧁āϤ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ­āϰāϏāĻž āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āϕ⧋āύ⧋ āĻ•ā§āϰāĻŽ āϰāĻžāϖ⧇ āύāĻžāĨ¤
  • āφāϗ⧇ āĻĒā§āϰāĻļā§āύāϟāĻž āĻŦāĻžāϛ⧋, āϤāĻžāϰāĻĒāϰ containerāĨ¤

āĻāϰāĻĒāϰ āĻĻ⧇āĻ–āĻŦ⧇ āϏ⧇āχ āϏ⧁āϤ⧋āϟāĻž, āϝ⧇āϟāĻž āĻāχ āϏāĻŦ container-āϕ⧇ algorithm-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻŦ⧇āρāϧ⧇ āϰāĻžāϖ⧇: iterator, āφāϰ āϏ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āϚāϞ⧇āĨ¤

lesson ā§Š āĻļ⧇āώ

āĻļ⧇āώ āĻšāϞ⧇ āϚāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āφāĻĒāύāĻžāϰ āϏāĻžāĻĨ⧇ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

āĻĒāϰ⧇āϰāϟāĻž: iterator āφāϰ algorithm: āϟ⧁āĻ•āϰ⧋āϗ⧁āϞ⧋ āĻœā§‹āĻĄāĻŧāĻž āϞāĻžāϗ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇