C++ Array
Some notes for myself for everything I learned that are helpful in competitive programming.
min_element and max_element
int myints[] = {3,7,2,5,6,4,9};
 	// using default comparison:
	cout << *min_element(myints,myints+7) << '\n';
    cout << *max_element(myints,myints+7) << '\n';Initialize on the Heap Memory
int *arr = new int[5];Working with Ranges
sort(a, a+n);
reverse(a, a+n);
random_shuffle(a, a+n);Polymorphic Array
It you try to do Polymorphism with arrays, you might easily run into issues…
class Vec2 {
	int x,y;
	public: 
		Vec2(int x, int y): x{x}, y{y} {}
};
 
class Vec3: public Vec2 {
	int z;
	public: 
		Vec3(int x, int y, int z): Vec2{x,y}, z{z} {}
};
 
void f(Vec2* a) {
	a[0] = Vec2{7,8};
	a[1] = Vec2{9,10};
}
 
Vec3 myArray[2] = {Vec3{1,2,3}, Vec3{4,5,6}};
 
f(myArray);What does f expect:
a[0].  a[1] ...
[x, y, x, y, ]
What it actually looks like:
a[0].  a[1] ...
[7, 8, 9, 10, 5, 6]
Data ends up misaligned. All of Vec2{7,8} is written into myArray[0]. Half of Vec2{9,10} is written into myArray[0], the other half is in myArray[1].
Lesson
Be very careful when using arrays of objects polymorphically. Solutions:
- Use an array of pointers:
Vec3* myArray[2]- Use a vector of
Vec3*
How does an array of pointers fix the issue?
..?