#include #include #include #include using namespace std; int calculateIndex(int x, int y); 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; } numbers[0] = 10; cout << "numbers[5]: " << numbers[5] << endl; int numbers2[] = { 0, 1, 2, 3, 4 }; int numbers3[10] = { 0, 1, 2, 3, 4 }; // 2d array - 10 rows & 5 columns int grid[10 * 5]; grid[calculateIndex(3, 7)] = 10; // 4th column, 8th row // size/count have to be always const const int count = 10; int numbers4[count]; int length = sizeof(numbers) / sizeof(numbers[0]); // works locally only, arrays with const length for (size_t i = 0; i < size(numbers2); i++) // std::size is working with locally const length arrays only { cout << numbers2[i] << " "; } cout << endl; printArray(numbers4); printArray(numbers4, size(numbers4)); // "dynamic" heap arrays int count2 = 10; int* pNumbers = new int[count2]; pNumbers[0] = 10; int* pNumber = pNumbers; // pNumber points onto the first element //pNumber++; // pNumber points onto the second element //pNumber--; //pNumber += 2; cout << "\"dynamic\" heap arrays" << endl; for (size_t i = 0; i < count2; i++) // CAUTION - size is not working with heap arrays, we have to remember the size of the array { cout << pNumber << ": " << *pNumber << endl; pNumber++; } delete[] pNumbers; // CAUTION - heap arrays have to be deleted with delete[] pNumbers = pNumber = nullptr; // 2d arrays int** p2dArray = new int* [10]; for (size_t i = 0; i < 10; i++) { p2dArray[i] = new int[10]; } // for delete -> delete inner arrays first for (size_t i = 0; i < 10; i++) { delete[] p2dArray[i]; p2dArray[i] = nullptr; } delete[] p2dArray; // then outer array p2dArray = 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(); // removed an item at the end numbers6[2] *= 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] = 100; // 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) { } // https://cppreference.com/w/cpp/algorithm.html for_each(numbersList.begin(), numbersList.end(), [](const int& n) { }); return 0; } int calculateIndex(int x, int y) { return x + y * 5; } void printArray(int numbers[]) { int length = sizeof(numbers) / sizeof(numbers[0]); // works not outside of local scope cout << "sizeof(numbers) (printArray): " << sizeof(numbers) << endl; //for (size_t i = 0; i < size(numbers); i++) // std::size is not working outside of 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; }