Learn C++ STL

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

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

āϕ⧇āύ āĻĻāϰāĻ•āĻžāϰ: āĻ•āĻŽ āϞāĻžāχāύ, āĻ•āĻŽ bug, āφāϰ āĻ–āϰāϚ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āϜāĻžāύāĻž

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

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

  • STL āĻļ⧇āĻ–āĻž āϕ⧇āύ āĻ•āĻžāĻœā§‡āϰ, āϤāĻžāϰ āϤāĻŋāύāϟāĻž āĻ¸ā§Ž āĻ•āĻžāϰāĻŖ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āĻĒ⧇āĻ›āύ⧇ āĻāĻ•āϟāĻž āĻ•āϰ⧇ program āϏāĻšāĨ¤
  • āĻāĻ•āϟāĻž C program-āϕ⧇ āϤāĻžāϰ STL version-āĻāϰ āĻĒāĻžāĻļ⧇ āϰ⧇āϖ⧇ āϗ⧁āύ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āϕ⧋āύ āĻ•āĻžāϜāϗ⧁āϞ⧋ āφāϰ āĻšāĻžāϤ⧇ āϞāĻŋāĻ–āϤ⧇ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤
  • STL-āĻāϰ āĻ–āϰāϚāϗ⧁āϞ⧋āϰ āύāĻžāĻŽ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āϝāĻžāϤ⧇ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰ⧋ āĻ•āĻ–āύ āĻšāĻžāϤ⧇ āϞ⧇āĻ–āĻž C āĻāĻ–āύ⧋ āĻ āĻŋāĻ• āĻĒāĻ›āĻ¨ā§āĻĻāĨ¤

Bob āϤāĻžāϰ āύāĻŽā§āĻŦāϰ āϰāĻžāĻ–āĻžāϰ program-āĻāϰ āϜāĻ¨ā§āϝ C-āϤ⧇ āĻāĻ•āϟāĻž āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array āϞāĻŋāϖ⧇āϛ⧇āĨ¤ āϏ⧋āĻŽāĻŦāĻžāϰ āϏ⧇āϟāĻž āĻ āĻŋāĻ•āĻ āĻžāĻ• āϚāϞ⧇āĨ¤ āĻŽāĻ™ā§āĻ—āϞāĻŦāĻžāϰ āĻāĻ• āĻŦāĻ¨ā§āϧ⧁ āĻ›āϝāĻŧāϟāĻž āύāĻŽā§āĻŦāϰ āϝ⧋āĻ— āĻ•āϰ⧇, āφāϰ āϤāĻžāϰ āĻĻ⧁āχāϟāĻž āĻĢ⧇āϰāϤ āφāϏ⧇ āĻļā§‚āĻ¨ā§āϝ āĻšāϝāĻŧ⧇āĨ¤

Bob-āĻāϰ resize-āĻāϰ code āĻāĻ•āϟāĻž element āĻ•āĻŽ copy āĻ•āϰ⧇āĨ¤ āϤāĻžāχ array āϝāϤāĻŦāĻžāϰ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, āĻļ⧇āώ āύāĻŽā§āĻŦāϰāϟāĻž āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ Compiler āĻ•āĻŋāϛ⧁āχ āĻŦāϞ⧇āύāĻŋ, program-āĻ“ āĻāĻ•āĻŦāĻžāϰāĻ“ crash āĻ•āϰ⧇āύāĻŋāĨ¤ vector::push_back āĻ āĻŋāĻ• āĻāχ āĻ•āĻžāϜāϟāĻžāχ āϞāĻžāĻ– āϞāĻžāĻ– program-āĻ āĻ•āϰ⧇āĨ¤ āĻ“āϤ⧇ Bob-āĻāϰ āĻŽāϤ⧋ āĻāĻ•āϟāĻž bug āĻĨāĻžāĻ•āϞ⧇ āĻ…āύ⧇āĻ• āφāϗ⧇āχ āϕ⧇āω āϧāϰ⧇ āĻĢ⧇āϞāϤ, āϏāĻžāϰāĻŋāϝāĻŧ⧇āĻ“ āĻĢ⧇āϞāϤāĨ¤

STL āϕ⧇āύ āϜāϰ⧁āϰāĻŋ, āĻāϟāĻž āϤāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āĻ•āĻžāϰāĻŖāĨ¤ āφāϰ⧋ āĻĻ⧁āχāϟāĻž āφāϛ⧇, āφāϰ āĻ–āϰāϚāĻ“ āφāϛ⧇āĨ¤ āĻāχ lesson-āĻ āϏāĻŦāϗ⧁āϞ⧋āχ āĻĒāĻžāĻŦ⧇āĨ¤ āϝ⧇ library āĻļ⧁āϧ⧁ āύāĻŋāĻœā§‡āϰ āϗ⧁āĻŖ āĻ—āĻžāϝāĻŧ, āϏ⧇ āϤ⧋ āĻĒ⧁āϰ⧋ āĻ—āĻ˛ā§āĻĒāϟāĻž āĻŦāϞāϛ⧇ āύāĻžāĨ¤

āĻ•āĻžāϰāĻŖ āĻāĻ•: āĻ āĻŋāĻ•āĻ āĻžāĻ• code, āϝ⧇āϟāĻž āϤ⧋āĻŽāĻžāϕ⧇ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧ āύāĻž

āϤ⧁āĻŽāĻŋ āϝāϤ āϞāĻžāχāύ āϞ⧇āĻ–ā§‹, āϤāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻžāχ āϭ⧁āϞ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ STL-āĻāϰ container āφāϰ algorithm āĻĒā§āϰāϤāĻŋāϟāĻž C++ compiler-āĻāϰ āϏāĻ™ā§āϗ⧇āχ āφāϏ⧇, āφāϰ āĻāĻ•āχ code āϰ⧋āϜ āϞāĻžāĻ– āϞāĻžāĻ– program-āĻ āϚāϞ⧇āĨ¤ push_back-āĻ āĻāĻ•āϟāĻž bug āĻĨāĻžāĻ•āϞ⧇ āĻ•āϝāĻŧ⧇āĻ• āϘāĻŖā§āϟāĻžāϰ āĻŽāĻ§ā§āϝ⧇āχ āϏ⧇āϟāĻž āϧāϰāĻž āĻĒāĻĄāĻŧāϤ, āφāϰ āϧāϰāϤ āĻ…āĻ¨ā§āϝ āϕ⧇āωāĨ¤

āĻāĻ•āχ āĻ•āĻžāϜ āĻĻ⧁āχāĻŦāĻžāϰ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻž āϝāĻžāĻ•: 1 āĻĨ⧇āϕ⧇ 5-āĻāϰ āĻŦāĻ°ā§āĻ—āϗ⧁āϞ⧋ āĻāĻ•āϟāĻž āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array-āϤ⧇ āϰāĻžāĻ–ā§‹, āϤāĻžāϰāĻĒāϰ āĻ›āĻžāĻĒāĻžāĻ“āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ C-āϤ⧇, āĻĒ⧁āϰ⧋ āύāĻŋāϝāĻŧāĻŽ āĻŽā§‡āύ⧇: array āĻŦāĻžāĻĄāĻŧāĻžāύ⧋āϰ āĻ…āĻ‚āĻļ āφāϰ memory āύāĻž āĻĒ⧇āϞ⧇ āϕ⧀ āĻšāĻŦ⧇ āϤāĻžāϰ check, āĻĻ⧁āχāϟāĻžāχ āϰ⧇āϖ⧇āĨ¤

Example 1: C-āϤ⧇ āĻāĻ•āϟāĻž āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *a = NULL;
    size_t n = 0, cap = 0;
    for (int x = 1; x <= 5; x++) {
        if (n == cap) {
            cap = cap ? cap * 2 : 1;
            int *p = realloc(a, cap * sizeof *a);
            if (p == NULL) { free(a); return 1; }
            a = p;
        }
        a[n++] = x * x;
    }
    for (size_t i = 0; i < n; i++) printf("%d\n", a[i]);
    free(a);
    return 0;
}
1
4
9
16
25

āĻāϟāĻž āĻ āĻŋāĻ•āĻ āĻžāĻ• CāĨ¤ āĻāϟāĻž āĻāĻ•āϟāĻž count āφāϰ āĻāĻ•āϟāĻž capacity āϰāĻžāϖ⧇, āϜāĻžāϝāĻŧāĻ—āĻž āĻ­āϰ⧇ āϗ⧇āϞ⧇ capacity āĻĻā§āĻŦāĻŋāϗ⧁āĻŖ āĻ•āϰ⧇, realloc āĻ•āĻžāϜ āĻ•āϰāϞ āĻ•āĻŋ āύāĻž āĻĻ⧇āϖ⧇, āφāϰ āĻļ⧇āώ⧇ memory āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āϜāĻžāϝāĻŧāĻ—āĻžāϤ⧇āχ Bob-āĻāϰ āĻŽāϤ⧋ bug āϞ⧁āĻ•āĻŋāϝāĻŧ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 2: āĻāĻ•āχ āĻ•āĻžāϜ, vector āĻĻāĻŋāϝāĻŧ⧇
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> a;
    for (int x = 1; x <= 5; x++) {
        a.push_back(x * x);
    }
    for (int v : a) std::cout << v << '\n';
}
1
4
9
16
25

Output āĻāĻ•āχāĨ¤ Count, capacity, āĻŦāĻžāĻĄāĻŧāĻžāύ⧋āϰ āύāĻŋāϝāĻŧāĻŽ, āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ āϕ⧀ āĻšāĻŦ⧇ āϤāĻžāϰ check, āφāϰ free, āϏāĻŦāχ āĻāĻ–āύ⧋ āĻšāĻšā§āϛ⧇, āϤāĻŦ⧇ std::vector-āĻāϰ āϭ⧇āϤāϰ⧇āĨ¤ āϤ⧋āĻŽāĻžāϕ⧇ āĻļ⧁āϧ⧁ āφāϰ āϞāĻŋāĻ–āϤ⧇ āĻšāĻšā§āϛ⧇ āύāĻžāĨ¤ āϤāĻžāχ āĻ“āχ āϞāĻžāχāύāϗ⧁āϞ⧋āϤ⧇ āϝ⧇ bug āĻĨāĻžāĻ•āϤ, āϤāĻžāĻĻ⧇āϰ āĻĨāĻžāĻ•āĻžāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϟāĻžāχ āφāϰ āύ⧇āχāĨ¤

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

āĻ•āĻžāϰāĻŖ āĻĻ⧁āχ: āĻĒā§āϰāϤāĻŋāϟāĻž operation-āĻāϰ āĻ–āϰāϚ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āϜāĻžāύāĻž

C++ standard āĻļ⧁āϧ⧁ āĻāϟāĻž āĻŦāϞ⧇ āύāĻž āϝ⧇ push_back āϕ⧀ āĻ•āϰ⧇āĨ¤ āĻ•āĻžāϜāϟāĻžāϝāĻŧ āĻ•āϤāĻ•ā§āώāĻŖ āϞāĻžāĻ—āϤ⧇ āĻĒāĻžāϰ⧇, āϏ⧇āϟāĻžāĻ“ āĻŦāϞ⧇ āĻĻ⧇āϝāĻŧ, āĻāĻ•āϟāĻž complexity āĻšāĻŋāϏ⧇āĻŦ⧇ (container āĻŦāĻĄāĻŧ āĻšāϞ⧇ āĻ•āĻžāϜ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻĄāĻŧ⧇)āĨ¤ push_back-āĻāϰ āĻŦ⧇āϞāĻžāϝāĻŧ āĻ•āĻĨāĻž āĻĻ⧇āĻ“āϝāĻŧāĻž āφāϛ⧇ "amortised constant": āĻ—āĻĄāĻŧ⧇ āĻāĻ•āϟāĻž element āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻ–āϰāϚ āĻāĻ•āχ, vector-āĻ āĻĻāĻļāϟāĻž āĻĨāĻžāϕ⧁āĻ• āĻŦāĻž āĻāĻ• āϕ⧋āϟāĻŋāĨ¤

āϤ⧋āĻŽāĻžāϰ āύāĻŋāĻœā§‡āϰ C array āĻāĻŽāύ āϕ⧋āύ⧋ āĻ•āĻĨāĻž āĻĻ⧇āϝāĻŧ āύāĻž, āϝāĻĻāĻŋ āύāĻž āϤ⧁āĻŽāĻŋ āĻŦāϏ⧇ āĻšāĻŋāϏāĻžāĻŦāϟāĻž āύāĻŋāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰ⧋āĨ¤ STL-āĻāϰ āĻ•āĻĨāĻžāϗ⧁āϞ⧋ āϞāĻŋāϖ⧇ āϰāĻžāĻ–āĻž āφāϛ⧇, āϏāĻŦ compiler-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āχāĨ¤ āĻāĻ•āϟāĻž āϞāĻžāχāύ āϞ⧇āĻ–āĻžāϰ āφāϗ⧇āχ āϤ⧁āĻŽāĻŋ āĻ“āϗ⧁āϞ⧋ āĻĻ⧇āϖ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧋āĨ¤ āϕ⧋āĻĨāĻžāϝāĻŧ āĻĻ⧇āĻ–āĻŦ⧇, Lesson 5 āϏ⧇āϟāĻž āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤

āĻāĻŦāĻžāϰ āĻāĻ•āϟāĻž search, āĻāϟāĻžāĻ“ āĻĻ⧁āχāĻŦāĻžāϰāĨ¤ āύāĻŽā§āĻŦāϰ⧇āϰ āĻāĻ•āϟāĻž list-āĻ 90 āϕ⧋āĻĨāĻžāϝāĻŧ āφāϛ⧇, āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰ⧋āĨ¤

Example 3: C-āϤ⧇ linear search
#include <stdio.h>

int main(void)
{
    int marks[] = {72, 45, 90, 61, 88};
    int n = sizeof marks / sizeof marks[0];
    int where = -1;
    for (int i = 0; i < n; i++) {
        if (marks[i] == 90) { where = i; break; }
    }
    if (where >= 0) printf("90 is at index %d\n", where);
    else printf("90 is not there\n");
    return 0;
}
90 is at index 2

Loop-āϟāĻž āϛ⧋āϟ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻŋāύāϟāĻž āϜāĻŋāύāĻŋāϏ āϤ⧁āĻŽāĻŋāχ āĻŦ⧇āϛ⧇āĻ›: loop-āĻāϰ āϏ⧀āĻŽāĻž, "āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāύāĻŋ" āĻŦā§‹āĻāĻžāϤ⧇ -1, āφāϰ breakāĨ¤ āϤāĻŋāύāϟāĻžāϰ āϝ⧇āϕ⧋āύ⧋ āĻāĻ•āϟāĻž āϭ⧁āϞ āĻšāϞ⧇ āωāĻ¤ā§āϤāϰāĻ“ āϭ⧁āϞāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 4: āĻāĻ•āχ search, std::find āĻĻāĻŋāϝāĻŧ⧇
#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> marks = {72, 45, 90, 61, 88};
    auto it = std::find(marks.begin(), marks.end(), 90);
    if (it != marks.end())
        std::cout << "90 is at index " << (it - marks.begin()) << '\n';
    else
        std::cout << "90 is not there\n";
}
90 is at index 2

std::find āĻĒā§āϰāĻĨāĻŽ āĻŽāĻŋāϞāϟāĻžāϰ āĻĻāĻŋāϕ⧇ āĻāĻ•āϟāĻž iterator āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ, āφāϰ āĻ•āĻŋāϛ⧁ āύāĻž āĻŽāĻŋāϞāϞ⧇ āĻĻ⧇āϝāĻŧ end()āĨ¤ āϤāĻžāχ "āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāύāĻŋ" āĻŦā§‹āĻāĻžāϤ⧇ āϤ⧋āĻŽāĻžāϕ⧇ āϕ⧋āύ⧋ āϏāĻ‚āĻ–ā§āϝāĻž āĻŦāĻžāύāĻžāϤ⧇ āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāϰ āĻ–āϰāϚāĻ“ standard-āĻ āϞ⧇āĻ–āĻž: āĻĒā§āϰāϤāĻŋāϟāĻž element-āĻāϰ āϜāĻ¨ā§āϝ āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻāĻ•āϟāĻž āϤ⧁āϞāύāĻž, āĻŽāĻžāύ⧇ linearāĨ¤ auto compiler-āϕ⧇ āĻŦāϞ⧇, iterator-āĻāϰ type-āϟāĻž āϤ⧋āĻŽāĻžāϰ āĻšāϝāĻŧ⧇ āϞāĻŋāϖ⧇ āĻĻāĻŋāϤ⧇; āĻāϟāĻž āφāϏāϛ⧇ Module 1-āĻāĨ¤

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

āĻ•āĻžāϰāĻŖ āϤāĻŋāύ: āĻāĻŽāύ code, āϝ⧇āϟāĻž āĻ…āĻ¨ā§āϝāϰāĻžāĻ“ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇

āĻāĻ•āϜāύ C++ programmer std::sort(v.begin(), v.end()) āĻĒāĻĄāĻŧāϞ⧇āχ āϜāĻžāύ⧇ āĻāϟāĻž āϕ⧀ āĻ•āϰ⧇, āĻ•āϤ āĻ–āϰāϚ, āφāϰ āĻāϟāĻž āϝ⧇ āĻ āĻŋāĻ•āĨ¤ āφāϗ⧇ āĻŦāϏ⧇ āĻāĻ•āϟāĻž sorting function āĻĒāĻĄāĻŧāϤ⧇ āĻšāϝāĻŧ āύāĻžāĨ¤ āύāĻžāĻŽāϗ⧁āϞ⧋ āĻĒ⧃āĻĨāĻŋāĻŦā§€āϰ āϏāĻŦ C++ programmer-āĻāϰ āĻšā§‡āύāĻž, āĻ āĻŋāĻ• āϝ⧇āĻŽāύ printf āϏāĻŦ C programmer-āĻāϰ āĻšā§‡āύāĻžāĨ¤

Sorting-āĻ āĻāϟāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ­āĻžāϞ⧋ āĻŦā§‹āĻāĻž āϝāĻžāϝāĻŧāĨ¤ C-āϤ⧇ āϤ⧋āĻŽāĻžāϕ⧇ āĻāĻ•āϟāĻž comparison function āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧāĨ¤ āϏ⧇āϟāĻž void pointer āύ⧇āϝāĻŧ, āϏ⧇āϗ⧁āϞ⧋āϕ⧇ cast āĻ•āϰ⧇, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻž negative, āĻļā§‚āĻ¨ā§āϝ āĻŦāĻž positive āϏāĻ‚āĻ–ā§āϝāĻž āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤

Example 5: C-āϤ⧇ qsort āĻĻāĻŋāϝāĻŧ⧇ sort
#include <stdio.h>
#include <stdlib.h>

int by_value(const void *a, const void *b)
{
    int x = *(const int *)a, y = *(const int *)b;
    return (x > y) - (x < y);
}

int main(void)
{
    int marks[] = {72, 45, 90, 61, 88};
    size_t n = sizeof marks / sizeof marks[0];
    qsort(marks, n, sizeof marks[0], by_value);
    printf("sorted:");
    for (size_t i = 0; i < n; i++) printf(" %d", marks[i]);
    printf("\n");
    return 0;
}
sorted: 45 61 72 88 90

āĻāχ comparator āϚāĻŋāϰāĻšā§‡āύāĻž return x - y; āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϗ⧇āϛ⧇, āĻ•āĻžāϰāĻŖ āϖ⧁āĻŦ āĻŦāĻĄāĻŧ āφāϰ āϖ⧁āĻŦ āϛ⧋āϟ int-āĻ āĻ“āϟāĻž overflow āĻ•āϰ⧇āĨ¤ āϤāĻŦ⧁āĻ“ āĻāϟāĻžāϕ⧇ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻĒāĻžāĻ āĻ•āϕ⧇ cast, element-āĻāϰ size āφāϰ count āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻšāϝāĻŧāĨ¤

Compiler-āĻ āϚāĻžāϞāĻžāĻ“
Example 6: āĻāĻ•āχ sort, std::sort āĻĻāĻŋāϝāĻŧ⧇
#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> marks = {72, 45, 90, 61, 88};
    std::sort(marks.begin(), marks.end());
    std::cout << "sorted:";
    for (int m : marks) std::cout << ' ' << m;
    std::cout << '\n';
}
sorted: 45 61 72 88 90

āϕ⧋āύ⧋ size āύ⧇āχ, āϕ⧋āύ⧋ cast āύ⧇āχ, āϏāĻžāϧāĻžāϰāĻŖ āĻ•ā§āϰāĻŽā§‡ āϏāĻžāϜāĻžāϤ⧇ āϕ⧋āύ⧋ comparator-āĻ“ āύ⧇āχāĨ¤ Compiler element-āĻāϰ type āϜāĻžāύ⧇āĨ¤ āϤāĻžāχ string-āϕ⧇ int-āĻāϰ āϤ⧁āϞāύāĻž āĻĻāĻŋāϝāĻŧ⧇ sort āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āϭ⧁āϞ āĻ•āϰāϞ⧇ āϏ⧇āϟāĻž compile error āĻšāϝāĻŧ⧇ āϧāϰāĻž āĻĒāĻĄāĻŧ⧇, āϭ⧁āϞ āωāĻ¤ā§āϤāϰ āĻšāϝāĻŧ⧇ āύāĻžāĨ¤

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

āϤāĻŋāύ āĻœā§‹āĻĄāĻŧāĻž, āϗ⧁āύ⧇ āĻĻ⧇āĻ–āĻž

āωāĻĒāϰ⧇āϰ āĻ›āϝāĻŧāϟāĻž program, āĻĻ⧁āχāĻ­āĻžāĻŦ⧇ āĻŽāĻžāĻĒāĻžāĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻŽāĻžāĻĒ āĻšāϞ⧋ code-āĻāϰ āϞāĻžāχāύ, āĻĢāĻžāρāĻ•āĻž āϞāĻžāχāύ āĻŦāĻžāĻĻ āĻĻāĻŋāϝāĻŧ⧇āĨ¤ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻŽāĻžāĻĒ āĻšāϞ⧋ āϏ⧇āχ āϖ⧁āρāϟāĻŋāύāĻžāϟāĻŋāϗ⧁āϞ⧋, āϝ⧇āϗ⧁āϞ⧋ āϤ⧋āĻŽāĻžāϕ⧇ āĻšāĻžāϤ⧇ āĻ āĻŋāĻ• āϰāĻžāĻ–āϤ⧇ āĻšāϝāĻŧāĨ¤ Table-āĻ āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āύāĻžāĻŽ āĻĻ⧇āĻ“āϝāĻŧāĻž āφāϛ⧇, āϝāĻžāϤ⧇ āĻ—ā§‹āύāĻžāϟāĻž āϤ⧁āĻŽāĻŋ āύāĻŋāĻœā§‡āχ āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧋āĨ¤

āϤāĻŋāύ āĻœā§‹āĻĄāĻŧāĻžāϰ code-āĻāϰ āϞāĻžāχāύ, C āĻŦāύāĻžāĻŽ STL Code-āĻāϰ āϞāĻžāχāύ (āĻĢāĻžāρāĻ•āĻž āϞāĻžāχāύ āĻŦāĻžāĻĻ), āĻāĻ• āϞāĻžāχāύ = 20 px āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array C: 19 vector: 10 Search C: 13 std::find: 12 Sort C: 17 std::sort: 11 āϧ⧂āϏāϰ bar āĻšāϞ⧋ C program, āϰāĻ™āĻŋāύ bar STL-āĻāϰāĨ¤ Include āφāϰ brace-āĻ“ āϞāĻžāχāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ—ā§‹āύāĻžāĨ¤
āĻ›āĻŦāĻŋ 1āĨ¤ Example 1 āĻĨ⧇āϕ⧇ 6-āĻāϰ code-āĻāϰ āϞāĻžāχāύ, āĻŽāĻžāĻĒ āĻŽā§‡āύ⧇ āφāρāĻ•āĻžāĨ¤ āϝ⧇āĻ–āĻžāύ⧇ C-āϤ⧇ āĻšāĻŋāϏāĻžāĻŦ āϰāĻžāĻ–āĻžāϰ āĻ•āĻžāϜ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻ›āĻŋāϞ, āĻĢāĻžāϰāĻžāĻ•āϟāĻžāĻ“ āϏ⧇āĻ–āĻžāύ⧇āχ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāĨ¤
āĻœā§‹āĻĄāĻŧāĻžC-āϤ⧇ āϝ⧇ āϖ⧁āρāϟāĻŋāύāĻžāϟāĻŋ āĻšāĻžāϤ⧇ āĻ āĻŋāĻ• āϰāĻžāĻ–āϤ⧇ āĻšāϝāĻŧSTL āĻĻāĻŋāϝāĻŧ⧇
āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array5: count, capacity, āĻŦāĻžāĻĄāĻŧāĻžāύ⧋āϰ āύāĻŋāϝāĻŧāĻŽ, realloc āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ āϕ⧀ āĻšāĻŦ⧇, free0
Search4: element-āĻāϰ āϏāĻ‚āĻ–ā§āϝāĻž, loop-āĻāϰ āϏ⧀āĻŽāĻž, "āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāύāĻŋ"-āĻāϰ āĻŽāĻžāύ, break1: end()-āĻāϰ āϏāĻ™ā§āϗ⧇ āϤ⧁āϞāύāĻž
Sort4: element-āĻāϰ āϏāĻ‚āĻ–ā§āϝāĻž, element-āĻāϰ size, void pointer-āĻāϰ cast, negative, āĻļā§‚āĻ¨ā§āϝ āφāϰ positive āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āύāĻŋāϝāĻŧāĻŽ0

āϞāĻžāχāύ āĻ—ā§‹āύāĻžāϟāĻž āĻŽā§‹āϟāĻž āĻĻāĻžāϗ⧇āϰ āĻŽāĻžāĻĒ, āφāϰ search-āĻāϰ āĻŦ⧇āϞāĻžāϝāĻŧ āĻĢāĻžāϰāĻžāĻ•āϟāĻž āϏāĻžāĻŽāĻžāĻ¨ā§āϝāχāĨ¤ āφāϏāϞ āĻ•āϞāĻžāĻŽ āĻšāϞ⧋ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻžāĨ¤ āĻšāĻžāϤ⧇ āϰāĻžāĻ–āĻž 13āϟāĻž āϖ⧁āρāϟāĻŋāύāĻžāϟāĻŋ āĻ•āĻŽā§‡ āĻšāϝāĻŧ āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻžāĨ¤ āφāϰ āϝ⧇ āϖ⧁āρāϟāĻŋāύāĻžāϟāĻŋ āϏāϰ⧇ āϗ⧇āϞ, āϏ⧇āĻ–āĻžāύ⧇ bug āĻšāĻ“āϝāĻŧāĻžāϰ āφāϰ āϕ⧋āύ⧋ āϏ⧁āϝ⧋āĻ—āχ āĻĨāĻžāĻ•āϞ āύāĻžāĨ¤

STL-āĻāϰ āϜāĻ¨ā§āϝ āϤ⧋āĻŽāĻžāϕ⧇ āϕ⧀ āĻĻāĻŋāϤ⧇ āĻšāϝāĻŧ

āĻĢā§āϰāĻŋāϤ⧇ āĻ•āĻŋāϛ⧁āχ āφāϏ⧇ āύāĻžāĨ¤ āύāĻŋāĻšā§‡ āϚāĻžāϰāϟāĻž āĻ–āϰāϚ, āϏ⧋āϜāĻžāϏ⧁āϜāĻŋ āĻŦāϞāĻž, āϝāĻžāϤ⧇ āϤ⧁āĻŽāĻŋ āύāĻŋāĻœā§‡āχ āĻĒāĻžāĻ˛ā§āϞāĻžāϝāĻŧ āϤ⧁āϞ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧋āĨ¤

  • Compile timeāĨ¤ Compiler Explorer-āĻ GCC 12.2, runner-āĻāϰ flag-āĻāϰ āϏāĻ™ā§āϗ⧇ -E āĻĻāĻŋāϝāĻŧ⧇ āϚāĻžāϞāĻžāϞ⧇ (āĻāϟāĻž āĻļ⧁āϧ⧁ header-āϗ⧁āϞ⧋ āϭ⧇āϤāϰ⧇ āĻŦāϏāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ), āĻĻ⧁āχāϟāĻž C header āϏāĻš Example 1 āĻĢ⧁āϞ⧇ āĻšāϝāĻŧ 665 āϞāĻžāχāύāĨ¤ <iostream> āφāϰ <vector> āϏāĻš Example 2 āĻĢ⧁āϞ⧇ āĻšāϝāĻŧ 32,394 āϞāĻžāχāύāĨ¤ āĻŦāĻĄāĻŧ project-āĻ āĻāϟāĻž āĻŸā§‡āϰ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ āϧ⧀āϰ build āĻšāĻŋāϏ⧇āĻŦ⧇āĨ¤
  • Error messageāĨ¤ Template āϭ⧁āϞāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ message-āϟāĻž library-āϰ āϭ⧇āϤāϰ⧇āϰ āĻ•āϝāĻŧ⧇āĻ• āĻĄāϜāύ āϞāĻžāχāύ āϜ⧁āĻĄāĻŧ⧇ āϚāϞāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĻāϰāĻ•āĻžāϰāĻŋ āϞāĻžāχāύāϟāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāĻŦ⧇, Module 1 āϏ⧇āϟāĻž āĻļ⧇āĻ–āĻžāĻŦ⧇āĨ¤
  • āĻļāĻŋāĻ–āϤ⧇ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇āĨ¤ āϕ⧋āύ āĻ•āĻžāĻœā§‡ āϕ⧋āύ container āĻŽāĻžāύāĻžāϝāĻŧ, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž operation-āĻāϰ āĻ–āϰāϚ āĻ•āϤ, āĻāϗ⧁āϞ⧋ āĻļāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāχ track āϏ⧇āϜāĻ¨ā§āϝāχ, āφāϰ āĻāϤ⧇ āĻ•āϝāĻŧ⧇āĻ• āϏāĻĒā§āϤāĻžāĻš āϞāĻžāϗ⧇, āĻāĻ• āĻŦāĻŋāϕ⧇āϞ⧇ āĻšāϝāĻŧ āύāĻžāĨ¤
  • āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āĻŽāĨ¤ Vector āύāĻŋāĻœā§‡āχ āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻ•āϤāϟāĻž āĻŦāĻžāĻĄāĻŧāĻŦ⧇, āφāϰ āĻ•āĻ–āύ āϤāĻžāϰ element-āϗ⧁āϞ⧋ āϏāϰāĻžāĻŦ⧇āĨ¤ āφāϗ⧇ āĻĨ⧇āϕ⧇ āϜāĻžāϝāĻŧāĻ—āĻž reserve āĻ•āϰāϤ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧋, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻžāĻĄāĻŧāĻžāϰ āύāĻŋāϝāĻŧāĻŽāϟāĻž āϤ⧁āĻŽāĻŋ āĻŦ⧇āϛ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧋ āύāĻžāĨ¤ āϝ⧇ code-āϕ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž byte-āĻāϰ āĻšāĻŋāϏāĻžāĻŦ āϰāĻžāĻ–āϤ⧇ āĻšāϝāĻŧ, āϝ⧇āĻŽāύ āϛ⧋āĻŸā§āϟ āϕ⧋āύ⧋ device-āĻāϰ firmware, āϏ⧇āϟāĻž āĻāχ āĻ•āĻžāϰāϪ⧇āχ āĻĒā§āϰāĻžāϝāĻŧāχ āϏāĻžāϧāĻžāϰāĻŖ C array āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤

āϤāĻžāĻšāϞ⧇ āĻ¸ā§Ž āϏāĻžāϰāĻ•āĻĨāĻž āĻāϟāĻžāĨ¤ āĻāχ track-āĻ āϤ⧁āĻŽāĻŋ āϝāϤ program āϞāĻŋāĻ–āĻŦ⧇, contest-āĻ āĻšā§‹āĻ• āĻŦāĻž āĻ…āĻĢāĻŋāϏ⧇, āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦāϗ⧁āϞ⧋āϤ⧇āχ STL āĻœā§‡āϤ⧇āĨ¤ āϝ⧇āĻ–āĻžāύ⧇ āĻœā§‡āϤ⧇ āύāĻž, āϏ⧇āĻ–āĻžāύ⧇ āϕ⧇āύ āĻœā§‡āϤ⧇ āύāĻž āϤ⧁āĻŽāĻŋ āĻŦ⧁āĻāĻŦ⧇, āĻ•āĻžāϰāĻŖ āĻāϰ āĻ–āϰāϚāϗ⧁āϞ⧋ āϤ⧋āĻŽāĻžāϰ āϜāĻžāύāĻžāĨ¤

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

  • C++ Core Guidelines. Bjarne Stroustrup āφāϰ Herb Sutter-āĻāϰ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰāĻž āĻāχ guideline āĻŦāϞ⧇, standard container-āχ āφāϗ⧇ āĻŦ⧇āϛ⧇ āύāĻžāĻ“āĨ¤ Rule SL.con.1 āĻŦāϞ⧇ C array-āϰ āĻŦāĻĻāϞ⧇ std::array āĻŦāĻž std::vector āύāĻŋāϤ⧇, āφāϰ SL.con.2 vector-āϕ⧇ default āĻŦāĻžāύāĻžāϝāĻŧāĨ¤
  • LLVM-āĻāϰ ADT library. LLVM āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻ•āĻŋāϛ⧁ container āϞāĻŋāϖ⧇āϛ⧇, āϝ⧇āĻŽāύ SmallVector, āφāϰ āϕ⧇āύ āϞāĻŋāϖ⧇āϛ⧇ āϏ⧇āϟāĻž āĻ“āĻĻ⧇āϰ Programmer's Manual-āĻ āĻŦāϞāĻž āφāϛ⧇āĨ¤ āĻāĻ•āϟāĻž SmallVector āϤāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āĻ•āϝāĻŧ⧇āĻ•āϟāĻž element āύāĻŋāĻœā§‡āϰ āϭ⧇āϤāϰ⧇āχ āϰāĻžāϖ⧇, āϤāĻžāχ āϛ⧋āϟ size-āĻ heap āĻĨ⧇āϕ⧇ memory āϚāĻžāχāϤ⧇ āĻšāϝāĻŧ āύāĻžāĨ¤ āĻŽāĻžāύ⧇ "āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āĻŽ" āĻ–āϰāϚāϟāĻž āĻāĻ•āϟāĻž project āχāĻšā§āĻ›āĻž āĻ•āϰ⧇āχ āĻĢ⧇āϰāϤ āĻ•āĻŋāύ⧇ āύāĻŋāϝāĻŧ⧇āϛ⧇, āφāϗ⧇ āĻŽā§‡āĻĒ⧇ āĻĻ⧇āϖ⧇āĨ¤
  • Google-āĻāϰ C++ Style Guide. Google-āĻāϰ code-āĻ standard container āφāϰ algorithm āĻ–ā§‹āϞāĻž āĻšāĻžāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāϝāĻŧāĨ¤ Guide-āϟāĻž āĻĒ⧁āϰ⧋ STL āύāĻŋāώ⧇āϧ āĻ•āϰ⧇ āύāĻžāĨ¤ āύāĻŋāώ⧇āϧ āĻ•āϰ⧇ āĻļ⧁āϧ⧁ standard library-āϰ āϛ⧋āϟ āĻāĻ•āϟāĻž āϤāĻžāϞāĻŋāĻ•āĻž, āϝ⧇āĻŽāύ <ratio> āφāϰ <filesystem>āĨ¤

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

ā§§. STL āϏāĻŦ bug āĻĻā§‚āϰ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ, āĻāϟāĻž āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāĻžāĨ¤

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v = {10, 20, 30};
    std::cout << v.at(10) << '\n';
}
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 10) >= this->size() (which is 3)

STL āĻšāĻŋāϏāĻžāĻŦ āϰāĻžāĻ–āĻžāϰ bug āϏāϰāĻžāϝāĻŧ, logic-āĻāϰ bug āύāĻžāĨ¤ āϤāĻŋāύ element-āĻāϰ vector-āĻāϰ āĻ•āĻžāϛ⧇ element 10 āϚāĻžāĻ“āϝāĻŧāĻž āĻāĻ–āύ⧋ āϭ⧁āϞāĨ¤ v.at(10) āωāĻĒāϰ⧇āϰ message āĻĻāĻŋāϝāĻŧ⧇ program āĻĨāĻžāĻŽāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ, āφāϰ āĻāϟāĻžāχ āĻ­āĻžāϞ⧋ āĻĢāϞāĨ¤ v[10] āϕ⧋āύ⧋ check-āχ āĻ•āϰ⧇ āύāĻž, āĻ“āχ āϜāĻžāϝāĻŧāĻ—āĻžāϰ memory-āϤ⧇ āϝāĻž āφāϛ⧇ āϤāĻžāχ āĻĒāĻĄāĻŧ⧇ āĻĢ⧇āϞ⧇āĨ¤ āĻļ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧāϟāĻžāϝāĻŧ at() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧋āĨ¤

⧍. āύāĻŋāĻœā§‡ āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāĻ•āĻž array āϞ⧇āĻ–āĻž, āφāϰ āĻāĻ•āϟāĻž element āĻ•āĻŽ copy āĻ•āϰāĻžāĨ¤

void push(int x)
{
    if (n == cap) {                         /* full: grow by two */
        int *bigger = calloc(cap + 2, sizeof *bigger);
        for (int i = 0; i < n - 1; i++) bigger[i] = a[i];
        free(a);
        a = bigger;
        cap += 2;
    }
    a[n++] = x;
}

āĻāϟāĻžāχ Bob-āĻāϰ functionāĨ¤ GCC āϕ⧋āύ⧋ message-āχ āĻĻ⧇āϝāĻŧ āύāĻžāĨ¤ 1 āĻĨ⧇āϕ⧇ 6 push āĻ•āϰ⧇ āĻ›āĻžāĻĒāĻžāĻ“, output āφāϏāĻŦ⧇ 1 0 3 0 5 6: array āϝāϤāĻŦāĻžāϰ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, āĻļ⧇āώ element-āϟāĻž āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āĻ•āĻžāϰāĻŖ copy āĻĨ⧇āĻŽā§‡ āϝāĻžāϝāĻŧ n - 1-āĻāĨ¤ āϏāĻŽāĻžāϧāĻžāύ āĻšāϞ⧋ i < n, āφāϰ āϤāĻžāϰ āĻšā§‡āϝāĻŧ⧇āĻ“ āĻ­āĻžāϞ⧋ āϏāĻŽāĻžāϧāĻžāύ std::vectorāĨ¤ āĻāχ bug āϤ⧁āĻŽāĻŋāĻ“ āϞāĻŋāĻ–āĻŦ⧇, āĻ•āĻžāϰāĻŖ off-by-one-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻšāϝāĻŧ āĻāĻŽāύ āϕ⧋āύ⧋ bug āύ⧇āχāĨ¤

ā§Š. std::find-āĻāϰ āωāĻ¤ā§āϤāϰāϕ⧇ true āĻŦāĻž false āϧāϰ⧇ āύ⧇āĻ“āϝāĻŧāĻžāĨ¤

if (std::find(v.begin(), v.end(), 8)) {
    std::cout << "found\n";
}

GCC 12 āĻŦāϞ⧇ (āĻŽāĻžāĻāĻ–āĻžāύāϟāĻž āϛ⧋āϟ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāύ⧋) error: could not convert 'std::find<...>(...)' from '__gnu_cxx::__normal_iterator<int*, std::vector<int> >' to 'bool'āĨ¤ find āĻšā§āϝāĻžāρ āĻŦāĻž āύāĻž āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āύāĻž, āĻĻ⧇āϝāĻŧ āĻāĻ•āϟāĻž iteratorāĨ¤ āϞ⧇āĻ–ā§‹ if (std::find(v.begin(), v.end(), 8) != v.end())āĨ¤ C-āϰ "āĻļā§‚āĻ¨ā§āϝ āĻŽāĻžāύ⧇ āύāĻž" āĻ…āĻ­ā§āϝāĻžāϏāϟāĻžāϰ āϜāĻ¨ā§āϝāχ āĻāĻ–āĻžāύ⧇ āϏāĻŦāĻžāχ āϧāϰāĻž āĻ–āĻžāϝāĻŧāĨ¤

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

āĻāχ program-āϟāĻž valid C, āφāĻŦāĻžāϰ valid C++-āĻ“āĨ¤ āĻāĻ•āĻŦāĻžāϰ C āĻšāĻŋāϏ⧇āĻŦ⧇ compile āĻ•āϰ⧋, āϤāĻžāϰāĻĒāϰ C++ āĻšāĻŋāϏ⧇āĻŦ⧇āĨ¤ āĻĻ⧁āχāĻŦāĻžāϰāχ āĻ•āĻŋ āĻāĻ•āχ āϏāĻ‚āĻ–ā§āϝāĻž āĻ›āĻžāĻĒāĻŦ⧇?

#include <stdio.h>

int main(void)
{
    printf("%zu\n", sizeof('a'));
    return 0;
}

āφāϏāϞ āĻĒā§āϰāĻļā§āύāϟāĻž āĻšāϞ⧋ 'a'-āĻāϰ type āϕ⧀āĨ¤ āĻĻ⧁āχ āĻ­āĻžāώāĻžāϤ⧇āχ "character literal" āϖ⧁āρāĻœā§‡ āĻĻ⧇āĻ–ā§‹, āφāϰ āĻŽāύ⧇ āĻ•āϰ⧋ Playground-āĻ āĻāĻ•āϟāĻž int āĻ•āϤ āĻŦāĻĄāĻŧāĨ¤

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

Example 1 āφāϰ 2 Playground-āĻ āϚāĻžāϞāĻžāĻ“āĨ¤ āϤāĻžāϰāĻĒāϰ āĻĻ⧁āχāϟāĻžāχ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻŦāĻĻāϞāĻžāĻ“, āϝāĻžāϤ⧇ 1 āĻĨ⧇āϕ⧇ 5-āĻāϰ āĻŦāĻĻāϞ⧇ 1 āĻĨ⧇āϕ⧇ 8-āĻāϰ āĻŦāĻ°ā§āĻ— āϰāĻžāϖ⧇āĨ¤

āύāĻŋāĻœā§‡ āϝāĻžāϚāĻžāχ āĻ•āϰ⧋āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž program-āĻ āĻ•āϝāĻŧāϟāĻž āϞāĻžāχāύ āĻŦāĻĻāϞāĻžāϤ⧇ āĻšāϞ⧋, āϗ⧁āύ⧇ āĻĻ⧇āĻ–ā§‹āĨ¤ C version-āĻ array āĻŦāĻžāĻĄāĻŧāĻžāύ⧋āϰ code āĻŦāĻĻāϞāĻžāϝāĻŧāύāĻŋ, āφāϰ āϕ⧇āύ āĻŦāĻĻāϞāĻžāϝāĻŧāύāĻŋ āϏ⧇āϟāĻž āϤ⧋āĻŽāĻžāϰ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻžāϰ āĻ•āĻĨāĻž: āĻ“āϟāĻž āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āϝāϤ āϏāĻ‚āĻ–ā§āϝāĻžāχ āφāϏ⧁āĻ• āϏāĻžāĻŽāϞāĻžāϤ⧇ āĻĒāĻžāϰāϤāĨ¤

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

"āϝ⧇ āϭ⧁āϞāϗ⧁āϞ⧋ āϏāĻŦāĻžāχ āĻ•āϰ⧇" āĻ…āĻ‚āĻļ āĻĨ⧇āϕ⧇ Bob-āĻāϰ push āύāĻžāĻ“āĨ¤ āύāĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇, āĻ–āĻžāϤāĻžāϝāĻŧ 1 āĻĨ⧇āϕ⧇ 6 āĻĒāĻ°ā§āϝāĻ¨ā§āϤ push āĻšāĻžāϤ⧇ āϧāϰ⧇ āϚāĻžāϞāĻžāĻ“: āĻĒā§āϰāϤāĻŋāϟāĻž push-āĻāϰ āĻĒāϰ n, cap āφāϰ array-āϰ āϭ⧇āϤāϰ⧇ āϕ⧀ āφāϛ⧇ āϞāĻŋāϖ⧇ āϰāĻžāĻ–ā§‹āĨ¤

āύāĻŋāϝāĻŧāĻŽāĨ¤ calloc-āĻāϰ āĻ•āĻĨāĻžāϟāĻž āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāĻ“: āύāϤ⧁āύ memory āĻļ⧁āϰ⧁āϤ⧇ āĻĒ⧁āϰ⧋āϟāĻžāχ āĻļā§‚āĻ¨ā§āϝ āĻĨāĻžāϕ⧇āĨ¤ āϝ⧇ push-āϗ⧁āϞ⧋āϤ⧇ array āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, āϏ⧇āϗ⧁āϞ⧋ āĻĻāĻžāĻ—āĻŋāϝāĻŧ⧇ āϰāĻžāĻ–ā§‹āĨ¤

āύāĻŋāĻœā§‡ āϝāĻžāϚāĻžāχ āĻ•āϰ⧋āĨ¤ āϤ⧋āĻŽāĻžāϰ āĻļ⧇āώ āϞāĻžāχāύ 1 0 3 0 5 6-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻŽāĻŋāϞāϤ⧇ āĻšāĻŦ⧇āĨ¤ Array āĻŦāĻĄāĻŧ āĻšāϝāĻŧ push 1, 3 āφāϰ 5-āĻ, āφāϰ āϤāĻŋāύāϟāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧁āχāϟāĻžāϝāĻŧ āĻāĻ•āϟāĻž element āĻšāĻžāϰāĻžāϝāĻŧāĨ¤ āĻĒā§āϰāĻĨāĻŽāϟāĻžāϝāĻŧ āϕ⧇āύ āĻšāĻžāϰāĻžāϝāĻŧ āύāĻž, āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞ⧋āĨ¤

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

Kenji āĻāĻ•āϟāĻž sensor-āĻāϰ firmware āϞāĻŋāĻ–āϛ⧇āĨ¤ Sensor-āϟāĻžāϰ memory 2 KB, āφāϰ āϕ⧋āύ⧋ operating system āύ⧇āχāĨ¤ āϏ⧇ std::vector āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇ āĻ•āĻŋ āύāĻž, āωāĻĒāϰ⧇āϰ āϚāĻžāϰāϟāĻž āĻ–āϰāϚ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ• āĻ…āύ⧁āĻšā§āϛ⧇āĻĻ⧇ āϞ⧇āĻ–ā§‹āĨ¤

āύāĻŋāϝāĻŧāĻŽāĨ¤ āĻ…āĻ¨ā§āϤāϤ āĻĻ⧁āχāϟāĻž āĻ–āϰāĻšā§‡āϰ āύāĻžāĻŽ āĻŦāϞ⧋, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āϤāĻžāϰ device-āĻ āφāĻĻ⧌ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻŋ āύāĻž, āϏ⧇āϟāĻžāĻ“ āĻŦāϞ⧋āĨ¤

āύāĻŋāĻœā§‡ āϝāĻžāϚāĻžāχ āĻ•āϰ⧋āĨ¤ āĻ­āĻžāϞ⧋ āωāĻ¤ā§āϤāϰ⧇āϰ āύāϜāϰ āĻĨāĻžāϕ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāϪ⧇āϰ āωāĻĒāϰāĨ¤ Vector āϝāĻ–āύāχ āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, heap-āĻāϰ āĻ•āĻžāϛ⧇ memory āϚāĻžāϝāĻŧāĨ¤ 2 KB-āϤ⧇, āϕ⧋āύ⧋ system āĻ›āĻžāĻĄāĻŧāĻž, āĻ“āχ āϚāĻžāĻ“āϝāĻŧāĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āφāϰ āϤāĻ–āύ āϏāĻžāĻŽāϞāĻžāύ⧋āϰ āϕ⧋āύ⧋ āωāĻĒāĻžāϝāĻŧ āĻĨāĻžāϕ⧇ āύāĻžāĨ¤ āĻ“āĻ–āĻžāύ⧇ compile time āĻĒā§āϰāĻžāϝāĻŧ āϕ⧋āύ⧋ āĻŦā§āϝāĻžāĻĒāĻžāϰāχ āύāĻžāĨ¤ āĻāĻ•āϟāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽāĻžāĻĒ⧇āϰ array, āĻŦāĻž Lesson 3-āĻāϰ std::array, āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ–āĻžāύ⧇ āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤

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

  • STL āĻāϤ āĻ­āĻžāϞ⧋ āĻšāϞ⧇ C programmer-āϰāĻž āĻāĻ–āύ⧋ āύāĻŋāĻœā§‡āĻĻ⧇āϰ array āύāĻŋāĻœā§‡āϰāĻž āϞ⧇āϖ⧇ āϕ⧇āύ?

    C-āϤ⧇ STL āύ⧇āχ, āϤāĻžāχ C-āϤ⧇ āĻŦāĻžāĻ›āĻžāϰ āĻ•āĻŋāϛ⧁ āύ⧇āχāĨ¤ C++-āĻ āφāϛ⧇āĨ¤ āύāĻŋāĻœā§‡ āϞ⧇āĻ–āĻžāϰ āϏāĻžāϧāĻžāϰāĻŖ āĻ•āĻžāϰāĻŖāϗ⧁āϞ⧋ "STL-āĻāϰ āϜāĻ¨ā§āϝ āϤ⧋āĻŽāĻžāϕ⧇ āϕ⧀ āĻĻāĻŋāϤ⧇ āĻšāϝāĻŧ" āĻ…āĻ‚āĻļ⧇ āφāϛ⧇: memory āϖ⧁āĻŦ āĻ•āĻŽ, āĻĒ⧁āϰ⧋ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĻāϰāĻ•āĻžāϰ, āĻŦāĻž LLVM-āĻāϰ SmallVector-āĻāϰ āĻŽāϤ⧋ āϕ⧋āύ⧋ āĻŦāĻŋāĻļ⧇āώ āϚāĻžāĻšāĻŋāĻĻāĻžāĨ¤

  • std::sort āĻ•āĻŋ āϏāĻ¤ā§āϝāĻŋāχ qsort-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ?

    āϏāĻžāϧāĻžāϰāĻŖāϤ, āĻšā§āϝāĻžāρāĨ¤ qsort āĻĒā§āϰāϤāĻŋāϟāĻž āϤ⧁āϞāύāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻž function pointer āĻĻāĻŋāϝāĻŧ⧇ āϤ⧋āĻŽāĻžāϰ comparator call āĻ•āϰ⧇āĨ¤ std::sort āĻāĻ•āϟāĻž template, āϤāĻžāχ compiler āϤ⧁āϞāύāĻžāϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϝāĻŧ, āφāϰ āϏ⧇āϟāĻž āϏāϰāĻžāϏāϰāĻŋ loop-āĻāϰ āϭ⧇āϤāϰ⧇ āĻŦāϏāĻŋāϝāĻŧ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ āϧāϰāύ⧇āϰ āϜāĻŋāύāĻŋāϏ āϤ⧁āĻŽāĻŋ āύāĻŋāĻœā§‡ āĻŽā§‡āĻĒ⧇ āĻĻ⧇āĻ–āĻŦ⧇ Module 17-āĻāĨ¤

  • Compile āĻŦāĻĄāĻŧ āĻšāϞ⧇ āĻ•āĻŋ program-āĻ“ āϧ⧀āϰ āĻšāϝāĻŧ?

    āύāĻžāĨ¤ āĻ“āχ 32,394 āϞāĻžāχāύ āĻšāϞ⧋ declaration, āϝ⧇āϗ⧁āϞ⧋ compiler āĻĒāĻĄāĻŧ⧇ āύ⧇āϝāĻŧ; āĻ“āĻĻ⧇āϰ āĻĒā§āϰāĻžāϝāĻŧ āϕ⧋āύ⧋āϟāĻžāχ āϤ⧋āĻŽāĻžāϰ program-āĻāϰ code āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āĻ–āϰāϚāϟāĻž build time-āĻ, run time-āĻ āύāĻžāĨ¤

  • Contest-āĻ āĻ•āĻŋ STL-āĻāϰ āωāĻĒāϰ āĻ­āϰāϏāĻž āĻ•āϰāĻž āϝāĻžāϝāĻŧ?

    āĻšā§āϝāĻžāρāĨ¤ ICPC āφāϰ Codeforces āĻĻ⧁āχ āϜāĻžāϝāĻŧāĻ—āĻžāϤ⧇āχ GCC āφāϰ āϤāĻžāϰ standard library āĻĒāĻžāĻŦ⧇, Playground āϝ⧇āϟāĻž āϚāĻžāϞāĻžāϝāĻŧ, āφāϰ contest-āĻāϰ solution-āĻ āĻāϟāĻž āϏāĻžāϰāĻžāĻ•ā§āώāĻŖāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāϝāĻŧāĨ¤ Contest-āĻ āϝ⧇ āĻ–āϰāϚāϗ⧁āϞ⧋ āφāϏāϞ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āϏ⧇āϗ⧁āϞ⧋ āĻšāϞ⧋ complexity, āφāϰ āĻāχ track āĻĒā§āϰāϤāĻŋāϟāĻž operation-āĻāϰ complexity āĻļ⧇āĻ–āĻžāϝāĻŧāĨ¤

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

  • STL āϤ⧋āĻŽāĻžāϕ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻŋāϤ code āĻĻ⧇āϝāĻŧ: āĻšāĻŋāϏāĻžāĻŦ āϰāĻžāĻ–āĻžāϰ āϝ⧇ āϞāĻžāχāύāϗ⧁āϞ⧋āϤ⧇ bug āĻĨāĻžāϕ⧇, āϏ⧇āϗ⧁āϞ⧋ āϤ⧋āĻŽāĻžāϰ program āĻĨ⧇āϕ⧇ āωāϧāĻžāĻ“āĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻž STL operation-āĻāϰ āĻ–āϰāϚ standard-āĻ āϞ⧇āĻ–āĻž, āϤāĻžāχ āĻ•āĻŋāϛ⧁ āϚāĻžāϞāĻžāύ⧋āϰ āφāϗ⧇āχ āϤ⧁āĻŽāĻŋ āϏ⧇āϟāĻž āϜāĻžāύāϤ⧇ āĻĒāĻžāϰ⧋āĨ¤
  • āϏāĻŦāĻžāϰ āĻšā§‡āύāĻž āύāĻžāĻŽ code-āϕ⧇ āĻĒāĻĄāĻŧāĻžāϰ āĻŽāϤ⧋ āĻ•āϰ⧇: std::sort āϕ⧀ āĻ•āϰ⧇, āϏāĻŦ C++ programmer āϜāĻžāύ⧇āĨ¤
  • āĻ–āϰāϚāϗ⧁āϞ⧋ āϏāĻ¤ā§āϝāĻŋ: āϞāĻŽā§āĻŦāĻž compile, āϞāĻŽā§āĻŦāĻž error message, āĻļāĻŋāĻ–āϤ⧇ āϏāĻŽāϝāĻŧ āϞāĻžāĻ—āĻž, āφāϰ āĻ•āĻŽ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖāĨ¤
  • STL āĻšāĻŋāϏāĻžāĻŦ āϰāĻžāĻ–āĻžāϰ bug āϏāϰāĻžāϝāĻŧ, logic-āĻāϰ bug āύāĻž; at() āϭ⧁āϞ index āϧāϰ⧇, [] āϧāϰ⧇ āύāĻžāĨ¤

āĻĒāϰ⧇āϰ lesson-āĻ āφāϏāϛ⧇ āϏāĻŦ container-āĻāϰ āĻĒ⧁āϰ⧋ āϤāĻžāϞāĻŋāĻ•āĻž, āĻāĻ• table-āĻ, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āϕ⧋āύ āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āĻĻ⧇āϝāĻŧāĨ¤

lesson ⧍ āĻļ⧇āώ

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

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