Files
david bc4b9f1691 add casts
add inline
add template
2025-09-23 18:17:48 +02:00

149 lines
3.2 KiB
C++

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include "grid.h"
using namespace std;
void printArray(int numbers[]);
void printArray(int numbers[], size_t count);
int main()
{
// C arrays
int numbers[10];
for (size_t 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] = 10;
cout << "numbers[5]: " << numbers[5] << endl;
// 2D array - 10 columns, 5 rows
int grid[COLUMNS * ROWS] = {};
grid[calculateIndex(3, 2)] = 10; // 4th column, 3rd row
//int grid2[10][10];
// size has to be always constant
const int count = 10;
int numbers4[count] = {};
int length = sizeof(numbers) / sizeof(numbers[0]); // works only with local constant sized arrays
for (size_t i = 0; i < size(numbers); i++) // works only with local constant sized arrays, but it is safer than sizeof
{
cout << numbers[i] << " ";
}
cout << endl;
printArray(numbers);
printArray(numbers, size(numbers));
// "dynamic" (heap) arrays
int count2 = 10;
int* pNumbers = new int[count2];
pNumbers[0] = 10;
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 array
int** pGrid = new int*[10];
cout << "grid starts at " << pGrid << endl;
for (size_t i = 0; i < 10; i++)
{
pGrid[i] = new int[10];
cout << i << ". row: " << &pGrid[i] << endl;
for (size_t j = 0; j < 10; j++)
{
cout << i << "/" << j << ": " << &pGrid[i][j] << endl;
}
}
// delete inner arrays first
for (size_t i = 0; i < 10; i++)
{
delete[] pGrid[i];
pGrid[i] = nullptr;
}
delete[] pGrid; // delete outer array second
pGrid = nullptr;
// stl collections
vector<int> numbers5;
vector<int> numbers6 = { 0, 1, 2, 3, 4 };
numbers5.push_back(10); // add an item at the end
numbers5.pop_back(); // remove the last item
numbers6[1] *= 2;
vector<int> numbers7;
numbers7.reserve(100);
numbers7.shrink_to_fit();
printArray(numbers6.data(), numbers6.size());
list<int> numbersList;
numbersList.push_back(10);
numbersList.push_front(0);
//numbersList[0] = 5; // random access is not available for lists
list<int>::iterator it = numbersList.begin();
for (; it != numbersList.end(); it++)
{
cout << *it << " ";
}
cout << endl;
numbersList.insert(--it, 20);
for (it = numbersList.begin(); it != numbersList.end(); it++)
{
cout << *it << " ";
}
cout << endl;
for (int n : numbersList)
{
}
for_each(numbers6.begin(), numbers6.end(), [](const int& n) {
cout << n << " ";
});
cout << endl;
return 0;
}
void printArray(int numbers[])
{
int length = sizeof(numbers) / sizeof(numbers[0]); // works not outside of the local scope
cout << "sizeof(numbers): " << sizeof(numbers) << endl;
//for (size_t i = 0; i < size(numbers); i++) // size is not working outside of the local scope
//{
// cout << numbers[i] << " ";
//}
//cout << endl;
}
void printArray(int numbers[], size_t count)
{
for (size_t i = 0; i < count; i++)
{
cout << numbers[i] << " ";
}
cout << endl;
}