142 lines
3.8 KiB
C++
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;
|
|
}
|