Add containers module with initial implementation and integrate into CMake build system.

This commit is contained in:
2026-02-21 10:38:58 +01:00
parent 90fbcc38dc
commit 939e98d5b2
16 changed files with 272 additions and 12 deletions
+1 -1
View File
@@ -1 +1 @@
pointer
containers
+1 -1
View File
@@ -3,7 +3,7 @@
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$/classes">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$/containers">
<contentRoot DIR="$PROJECT_DIR$" />
</component>
</project>
+1
View File
@@ -4,3 +4,4 @@ project(cpp)
add_subdirectory(intro)
add_subdirectory(pointer)
add_subdirectory(classes)
add_subdirectory(containers)
+2 -2
View File
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 4.1)
project(pointer)
project(classes)
set(CMAKE_CXX_STANDARD 20)
add_executable(pointer main.cpp ClassA.cpp)
add_executable(classes main.cpp ClassA.cpp)
+30
View File
@@ -2,6 +2,36 @@
#include <iostream>
ClassA::ClassA() : IComparable(), _number(0), _pDecimal(new float(0.0f)) {
std::cout << "ClassA()" << std::endl;
// _pDecimal = new float(0.0f);
}
ClassA::ClassA(const ClassA &other) :
IComparable(),
_number(other._number),
_pDecimal(new float(*other._pDecimal)) {
std::cout << "ClassA(const ClassA &other)" << std::endl;
// // for presentation only
// // shallow copy
// _number = other._number;
// *_pDecimal = *other._pDecimal;
//
// // deep copy
// _number = other._number;
// _pDecimal = new float(*other._pDecimal);
}
ClassA::~ClassA() {
std::cout << "~ClassA()" << std::endl;
delete _pDecimal;
_pDecimal = nullptr;
}
void ClassA::Print() {
std::cout << "ClassA" << std::endl;
}
+8 -1
View File
@@ -8,16 +8,23 @@ class ClassA : public IComparable {
public:
// public
ClassA(); // default constructor
ClassA(const ClassA& other); // copy constructor
~ClassA() override; // destructor
void Print();
int CompareTo(IComparable* other) override;
const float& GetDecimal() const { return *_pDecimal; }
void SetDecimal(float decimal) { *_pDecimal = decimal; }
protected:
// protected
private:
// private
int _number = 0;
float* _pDecimal = nullptr;
};
#endif //POINTER_CLASSA_H
+5
View File
@@ -1,8 +1,13 @@
#ifndef POINTER_ICOMPARABLE_H
#define POINTER_ICOMPARABLE_H
#include <iostream>
class IComparable {
public:
// only for presentation purposes
IComparable() { std::cout << "IComparable()" << std::endl; }
virtual ~IComparable() { std::cout << "~IComparable()" << std::endl; }
virtual int CompareTo(IComparable* other) = 0;
};
+20
View File
@@ -1,4 +1,5 @@
#include "ClassA.h"
#include <list>
int main() {
ClassA a{};
@@ -20,5 +21,24 @@ int main() {
delete pComparable;
pComparable = nullptr;
// copy object
ClassA a2 = a;
std::list<ClassA> list;
std::list<ClassA>::iterator it;
for (it = list.begin(); it != list.end(); ++it) {
it->Print();
}
std::list<IComparable*> list2;
std::list<IComparable*>::iterator it2;
for (it2 = list2.begin(); it2 != list2.end(); ++it2) {
(*it2)->CompareTo(&a);
}
IComparable* pComparables[10];
return 0;
}
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 4.1)
project(containers)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS -pedantic-errors)
add_executable(containers main.cpp
functions.cpp)
+14
View File
@@ -0,0 +1,14 @@
#include <iostream>
void printArrayAtPosition(int *array, int index) {
if (array == nullptr) {
return;
}
if (index < 0) {
return;
}
std::cout << "size of array: " << sizeof(array) << std::endl;
std::cout << array[index] << std::endl;
}
+10
View File
@@ -0,0 +1,10 @@
//
// Created by David Hackbarth on 20.02.26.
//
#ifndef CONTAINERS_FUNCTIONS_H
#define CONTAINERS_FUNCTIONS_H
void printArrayAtPosition(int* array, int index);
#endif //CONTAINERS_FUNCTIONS_H
+65
View File
@@ -0,0 +1,65 @@
#include <iostream>
#include <vector>
#include <list>
#include "functions.h"
typedef std::list<float> FloatList;
typedef FloatList::iterator FloatListIterator;
int main() {
// C array
int numbers[5] = {1, 2, 3, 4, 5}; // stack array
const int count = 10;
// count *= 2;
int numbers2[count];
numbers2[0] = 10;
int* numbers3 = new int[count]; // heap array
delete[] numbers3;
numbers3 = nullptr;
// numbers[10] = 100;
std::cout << "size of numbers: " << sizeof(numbers) << std::endl;
printArrayAtPosition(numbers, 19);
// vector
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.pop_back();
v[1] = 100;
std::cout << "v: " << v.size() << "/" << v.capacity() << std::endl;
v.push_back(40);
std::cout << "v: " << v.size() << "/" << v.capacity() << std::endl;
v.push_back(50);
std::cout << "v: " << v.size() << "/" << v.capacity() << std::endl;
v.push_back(60);
std::cout << "v: " << v.size() << "/" << v.capacity() << std::endl;
v.reserve(100);
std::cout << "v: " << v.size() << "/" << v.capacity() << std::endl;
printArrayAtPosition(v.data(), 1);
// list
std::list<int> l;
std::list<int>::iterator it;
for (it = l.begin(); it != l.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}