Files
2026-09-29 22:09:02 +02:00

142 lines
3.8 KiB
C++

#include <iostream>
#include <list>
#include <vector>
#include "helpers.h"
using namespace std;
// int main()
int main(int argc, char* argv[])
{
// C arrays
int numbers[10];
for (int i = 0; i < 10; ++i)
{
numbers[i] = 0;
}
int numbers2[] = {0, 1, 2, 3, 4};
int numbers3[10] = {0, 1, 2, 3, 4};
numbers[0] = 1;
cout << "numbers[5]: " << numbers[5] << endl;
cout << "numbers2[5]: " << numbers2[5] << endl;
cout << "numbers3[5]: " << numbers3[5] << endl;
// 2D array - 10 columns, 5 rows
int grid[ROWS * COLUMNS] = {};
grid[calculateGridIndex(0, 0)] = 1;
int grid2[ROWS][COLUMNS] = {};
// size of an array has to be constant always
const int COUNT = 10;
int numbers4[COUNT] = {};
// "dynamic" heap arrays
int count2 = 10;
int* pNumbers = new int[count2];
pNumbers[0] = 1;
int* pNumbers2 = pNumbers; // pointer looks onto first element
for (size_t i = 0; i < count2; i++) // size can't be used for heap arrays
{
cout << pNumbers2 << ": " << *pNumbers2 << endl;
pNumbers2++;
}
delete[] pNumbers; // CAUTION - heap arrays have to be deleted with delete[]
pNumbers = pNumbers2 = nullptr;
// 2d heap arrays
int** pGrid = new int*[ROWS];
for (size_t i = 0; i < ROWS; i++)
{
pGrid[i] = new int[COLUMNS];
}
for (size_t i = 0; i < ROWS; i++)
{
// delete inner arrays first
delete[] pGrid[i];
pGrid[i] = nullptr;
}
delete[] pGrid; // delete outer array
pGrid = nullptr;
int length = sizeof(numbers) / sizeof(numbers[0]);
int length2 = size(numbers);
printArray(numbers);
printArray(numbers, length);
// stl collections
std::vector<int> numbers5 = {0, 1, 2, 3, 4};
vector<int> numbers6;
vector<int> numbers7(100);
cout << "numbers5 size is " << numbers5.size() << " of " << numbers5.capacity() << endl;
cout << "numbers6 size is " << numbers6.size() << " of " << numbers6.capacity() << endl;
cout << "numbers7 size is " << numbers7.size() << " of " << numbers7.capacity() << endl;
numbers5.push_back(100);
numbers6.push_back(100);
numbers7.push_back(100);
cout << "numbers5 size is " << numbers5.size() << " of " << numbers5.capacity() << endl;
cout << "numbers6 size is " << numbers6.size() << " of " << numbers6.capacity() << endl;
cout << "numbers7 size is " << numbers7.size() << " of " << numbers7.capacity() << endl;
numbers5.pop_back();
numbers5.pop_back();
// numbers6.pop_back(); numbers6.pop_back(); // BE CAREFUL: also stl containers have no safety checks
numbers7.pop_back();
numbers7.pop_back();
cout << "numbers5 size is " << numbers5.size() << " of " << numbers5.capacity() << endl;
cout << "numbers6 size is " << numbers6.size() << " of " << numbers6.capacity() << endl;
cout << "numbers7 size is " << numbers7.size() << " of " << numbers7.capacity() << endl;
numbers6[0] = 200;
numbers6.reserve(1000);
numbers6.shrink_to_fit();
printArray(numbers6.data(), numbers6.size());
list<int> numbers8;
list<int> numbers9 = {0, 1, 2, 3, 4};
// numbers9[3] = 10; // random access is not available in list
list<int>::iterator it = numbers9.begin();
for (; it != numbers9.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
numbers9.push_front(-1);
numbers9.push_back(5);
it = numbers9.begin(); // -1
it++; // 0
it++; // 1
it++; // 2
numbers9.insert(it, 15);
for (it = numbers9.begin(); it != numbers9.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
for (int n : numbers9)
{
}
for_each(numbers9.begin(), numbers9.end(), [](int n) { cout << n << " "; });
cout << endl;
return 0;
}