#include #include #include #include #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 numbers5; vector 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 numbers7; numbers7.reserve(100); numbers7.shrink_to_fit(); printArray(numbers6.data(), numbers6.size()); list numbersList; numbersList.push_back(10); numbersList.push_front(0); //numbersList[0] = 5; // random access is not available for lists list::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; }