Module ā§Ļ ¡ STL āĻāĻŋāύāĻŋāϏāĻāĻž āĻā§, āĻāϰ āĻāĻāĻž C++ āϞā§āĻāĻžāϰ āϧāϰāύāĻāĻžāĻ āĻĒāĻžāϞā§āĻā§ āĻĻā§āϝāĻŧ āĻā§āύ
āĻā§āύ āĻĻāϰāĻāĻžāϰ: āĻāĻŽ āϞāĻžāĻāύ, āĻāĻŽ bug, āĻāϰ āĻāϰāĻ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻžāύāĻž
āĻāĻ 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, āĻĻā§āĻāĻāĻžāĻ āϰā§āĻā§āĨ¤
#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 āϞā§āĻāĻŋāϝāĻŧā§ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
#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 āĻĨāĻžāĻāϤ, āϤāĻžāĻĻā§āϰ āĻĨāĻžāĻāĻžāϰ āĻāĻžāϝāĻŧāĻāĻžāĻāĻžāĻ āĻāϰ āύā§āĻāĨ¤
āĻāĻžāϰāĻŖ āĻĻā§āĻ: āĻĒā§āϰāϤāĻŋāĻāĻž operation-āĻāϰ āĻāϰāĻ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻžāύāĻž
C++ standard āĻļā§āϧ⧠āĻāĻāĻž āĻŦāϞ⧠āύāĻž āϝ⧠push_back āĻā§ āĻāϰā§āĨ¤ āĻāĻžāĻāĻāĻžāϝāĻŧ āĻāϤāĻā§āώāĻŖ āϞāĻžāĻāϤ⧠āĻĒāĻžāϰā§, āϏā§āĻāĻžāĻ āĻŦāϞ⧠āĻĻā§āϝāĻŧ, āĻāĻāĻāĻž complexity āĻšāĻŋāϏā§āĻŦā§ (container āĻŦāĻĄāĻŧ āĻšāϞ⧠āĻāĻžāĻ āĻā§āĻāĻžāĻŦā§ āĻŦāĻžāĻĄāĻŧā§)āĨ¤ push_back-āĻāϰ āĻŦā§āϞāĻžāϝāĻŧ āĻāĻĨāĻž āĻĻā§āĻāϝāĻŧāĻž āĻāĻā§ "amortised constant": āĻāĻĄāĻŧā§ āĻāĻāĻāĻž element āϝā§āĻ āĻāϰāĻžāϰ āĻāϰāĻ āĻāĻāĻ, vector-āĻ āĻĻāĻļāĻāĻž āĻĨāĻžāĻā§āĻ āĻŦāĻž āĻāĻ āĻā§āĻāĻŋāĨ¤
āϤā§āĻŽāĻžāϰ āύāĻŋāĻā§āϰ C array āĻāĻŽāύ āĻā§āύ⧠āĻāĻĨāĻž āĻĻā§āϝāĻŧ āύāĻž, āϝāĻĻāĻŋ āύāĻž āϤā§āĻŽāĻŋ āĻŦāϏ⧠āĻšāĻŋāϏāĻžāĻŦāĻāĻž āύāĻŋāĻā§ āĻŦā§āϰ āĻāϰā§āĨ¤ STL-āĻāϰ āĻāĻĨāĻžāĻā§āϞ⧠āϞāĻŋāĻā§ āϰāĻžāĻāĻž āĻāĻā§, āϏāĻŦ compiler-āĻāϰ āĻāύā§āϝ āĻāĻāĻāĨ¤ āĻāĻāĻāĻž āϞāĻžāĻāύ āϞā§āĻāĻžāϰ āĻāĻā§āĻ āϤā§āĻŽāĻŋ āĻāĻā§āϞ⧠āĻĻā§āĻā§ āύāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻā§āĻĨāĻžāϝāĻŧ āĻĻā§āĻāĻŦā§, Lesson 5 āϏā§āĻāĻž āĻĻā§āĻāĻžāĻŦā§āĨ¤
āĻāĻŦāĻžāϰ āĻāĻāĻāĻž search, āĻāĻāĻžāĻ āĻĻā§āĻāĻŦāĻžāϰāĨ¤ āύāĻŽā§āĻŦāϰā§āϰ āĻāĻāĻāĻž list-āĻ 90 āĻā§āĻĨāĻžāϝāĻŧ āĻāĻā§, āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰā§āĨ¤
#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āĨ¤ āϤāĻŋāύāĻāĻžāϰ āϝā§āĻā§āύ⧠āĻāĻāĻāĻž āĻā§āϞ āĻšāϞ⧠āĻāϤā§āϤāϰāĻ āĻā§āϞāĨ¤
#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-āĻāĨ¤
āĻāĻžāϰāĻŖ āϤāĻŋāύ: āĻāĻŽāύ 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 āϏāĻāĻā§āϝāĻž āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤
#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 āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āĻĻā§āĻāϤ⧠āĻšāϝāĻŧāĨ¤
#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-āĻ āĻĒā§āϰāϤāĻŋāĻāĻžāϰ āύāĻžāĻŽ āĻĻā§āĻāϝāĻŧāĻž āĻāĻā§, āϝāĻžāϤ⧠āĻā§āύāĻžāĻāĻž āϤā§āĻŽāĻŋ āύāĻŋāĻā§āĻ āĻŽāĻŋāϞāĻŋāϝāĻŧā§ āύāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤
| āĻā§āĻĄāĻŧāĻž | C-āϤ⧠āϝ⧠āĻā§āĻāĻāĻŋāύāĻžāĻāĻŋ āĻšāĻžāϤ⧠āĻ āĻŋāĻ āϰāĻžāĻāϤ⧠āĻšāϝāĻŧ | STL āĻĻāĻŋāϝāĻŧā§ |
|---|---|---|
| āĻŦāĻžāĻĄāĻŧāϤ⧠āĻĨāĻžāĻāĻž array | 5: count, capacity, āĻŦāĻžāĻĄāĻŧāĻžāύā§āϰ āύāĻŋāϝāĻŧāĻŽ, realloc āĻŦā§āϝāϰā§āĻĨ āĻšāϞ⧠āĻā§ āĻšāĻŦā§, free | 0 |
| Search | 4: element-āĻāϰ āϏāĻāĻā§āϝāĻž, loop-āĻāϰ āϏā§āĻŽāĻž, "āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāϝāĻŧāύāĻŋ"-āĻāϰ āĻŽāĻžāύ, break | 1: end()-āĻāϰ āϏāĻā§āĻā§ āϤā§āϞāύāĻž |
| Sort | 4: 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.2vector-āĻā§ 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-āϰ "āĻļā§āύā§āϝ āĻŽāĻžāύ⧠āύāĻž" āĻ
āĻā§āϝāĻžāϏāĻāĻžāϰ āĻāύā§āϝāĻ āĻāĻāĻžāύ⧠āϏāĻŦāĻžāĻ āϧāϰāĻž āĻāĻžāϝāĻŧāĨ¤
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-āĻā§āϞ⧠āĻāĻ āύāĻāϰā§: āĻā§āύāĻāĻž āĻā§ āĻāĻžāĻā§ āĻāĻžāϞā§