diff --git a/c-crash-course/example1.cpp b/c-crash-course/example1.cpp new file mode 100644 index 0000000..7e06628 --- /dev/null +++ b/c-crash-course/example1.cpp @@ -0,0 +1,14 @@ +// Simple C++ example +#include + +using namespace std; + +int main(int argc, char * argv[]) // parameters are optional +{ + // cout is located in the std namespace + cout << "hello, world" << endl; + // could also be written as + std::cout << "hello, world" << endl; + + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example10.c b/c-crash-course/example10.c new file mode 100644 index 0000000..0d5075d --- /dev/null +++ b/c-crash-course/example10.c @@ -0,0 +1,16 @@ +//C - could also do this - valid in C++ as well +#include +#include + +void f(int * i) +{ + *i = 4; +} + +int main() +{ + int x = 10; + f(&x); + printf("%i", x); + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example11.cpp b/c-crash-course/example11.cpp new file mode 100644 index 0000000..ab9dc7e --- /dev/null +++ b/c-crash-course/example11.cpp @@ -0,0 +1,19 @@ +//C++ +#include + +class A +{ +public: + A() { std::cout << "Default ctor" << endl; } + A(int i) { std::cout << "Non default ctor" << endl; } + ~A() { std::cout << "dtor" << endl; } + void f() { std::cout << "woof" << std::endl; } +}; + +int main() +{ + A a; + A b(1); + a.f(); + d.f(); +} \ No newline at end of file diff --git a/c-crash-course/example12.c b/c-crash-course/example12.c new file mode 100644 index 0000000..528ed6d --- /dev/null +++ b/c-crash-course/example12.c @@ -0,0 +1,17 @@ +//Linked lists in C +#include +#include + +typedef struct node +{ + int i; + struct node * next; +} node; + +int main() +{ + node * root = malloc(sizeof(node)); + root->next = NULL; + free(root); + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example13.cpp b/c-crash-course/example13.cpp new file mode 100644 index 0000000..1a3f68d --- /dev/null +++ b/c-crash-course/example13.cpp @@ -0,0 +1,16 @@ +//Linked lists in C++ +#include + +struct node +{ + int i; + node * next; +}; + +int main() +{ + node * root = new node(); + root->next = NULL; + delete root; + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example14.cpp b/c-crash-course/example14.cpp new file mode 100644 index 0000000..4449829 --- /dev/null +++ b/c-crash-course/example14.cpp @@ -0,0 +1,25 @@ +//C++ Smart pointers +#include + +struct node +{ + int i; + node * next; +}; + +template +class smartptr +{ +private: + T * ptr; +public: + smartptr(T * t) { ptr = t; } + ~smartptr() { delete ptr; } + T* operator ->() { return ptr; } +}; + +int main() +{ + smartptr n(new node()); + n->next = NULL; +} \ No newline at end of file diff --git a/c-crash-course/example15.cpp b/c-crash-course/example15.cpp new file mode 100644 index 0000000..41ce0b6 --- /dev/null +++ b/c-crash-course/example15.cpp @@ -0,0 +1,13 @@ +//C++ built in smart pointers +#include +#include + +using namespace std; + +int main() +{ + shared_ptr x(new int(5)); + unique_ptr y(new int(10)); + shared_ptr z = x; + unique_ptr yy = move(y); +} \ No newline at end of file diff --git a/c-crash-course/example16.cpp b/c-crash-course/example16.cpp new file mode 100644 index 0000000..0f30ca7 --- /dev/null +++ b/c-crash-course/example16.cpp @@ -0,0 +1,18 @@ +//C++ - using vectors as C arrays +#include +#include + +void f(int * arr, size_t count) +{ + for(size_t i = 0; i < count; i++) + std::cout << *(i+arr) << std::endl; //arr[i] also works as well +} + +int main() +{ + std::vector x; + x.push_back(1); + x.push_back(2); + f(&x[0], x.size()); + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example17.cpp b/c-crash-course/example17.cpp new file mode 100644 index 0000000..c8e1c0b --- /dev/null +++ b/c-crash-course/example17.cpp @@ -0,0 +1,15 @@ +//C++ - using vectors as C arrays +#include +#include +#include +#include + +int main() +{ + std::vector wstr; + std::string x = "normal string"; + wstr.resize(x.size() + 1); + size_t convertedChars = 0; + mbstowcs_s(&convertedChars, &wstr[0], x.size() + 1, x.c_str(), _TRUNCATE); + std::wcout << &wstr[0] << std::endl; +} \ No newline at end of file diff --git a/c-crash-course/example18.cpp b/c-crash-course/example18.cpp new file mode 100644 index 0000000..ce5f05d --- /dev/null +++ b/c-crash-course/example18.cpp @@ -0,0 +1,14 @@ +//C++ - using vectors as C arrays +#include +#include +#include +#include + +int main() +{ + std::vector wstr; + std::string x = "normal string"; + std::wstring z = std::wstring(x.begin(), x.end()); + std::wcout << z.c_str() << std::endl; + std::wcout << &z[0] << std::endl; +} \ No newline at end of file diff --git a/c-crash-course/example19.cpp b/c-crash-course/example19.cpp new file mode 100644 index 0000000..b17c979 --- /dev/null +++ b/c-crash-course/example19.cpp @@ -0,0 +1,22 @@ +//C++ - using iterators +#include +#include + +void slice(std::vector::iterator start, std::vector::iterator end) +{ + for(std::vector::iterator i = start; i != end; i++) + std::cout << *i << std::endl; +} + +int main() +{ + std::vector x; + for (int i= 0; i < 10; ++i) { x.push_back(i); } + + for(std::vector::iterator i = x.begin(); i != x.end(); i++) + std::cout << *i << std::endl; + std::cout << std::endl; + slice(x.begin(), x.begin() + 2); + std::cout << std::endl; + slice(x.end() - 2, x.end()); +} \ No newline at end of file diff --git a/c-crash-course/example2.c b/c-crash-course/example2.c new file mode 100644 index 0000000..4acc190 --- /dev/null +++ b/c-crash-course/example2.c @@ -0,0 +1,8 @@ +// Simple C example +#include + +int main(int argc, char * argv[]) +{ + printf("Hello, world"); + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example3.cpp b/c-crash-course/example3.cpp new file mode 100644 index 0000000..e26df3a --- /dev/null +++ b/c-crash-course/example3.cpp @@ -0,0 +1,9 @@ +// Simple C++ with C libraries +#include +// #include would also work + +int main(int argc, char * argv[]) +{ + printf("Hello, world"); + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example4.cpp b/c-crash-course/example4.cpp new file mode 100644 index 0000000..6102b7c --- /dev/null +++ b/c-crash-course/example4.cpp @@ -0,0 +1,9 @@ +// Declaring variables +#include //string +#include //vector +int main() +{ + int i; + std::string x; + std::vector y; +} \ No newline at end of file diff --git a/c-crash-course/example5.cpp b/c-crash-course/example5.cpp new file mode 100644 index 0000000..5805107 --- /dev/null +++ b/c-crash-course/example5.cpp @@ -0,0 +1,11 @@ +// Pointers are variables that point to blocks of memory +// C++ +#include + +int main() +{ + int * i = new int(5); + // In order to view that block of memory you must look at + std::cout << *i << std::endl; + delete i; +} \ No newline at end of file diff --git a/c-crash-course/example6.c b/c-crash-course/example6.c new file mode 100644 index 0000000..d72b0b1 --- /dev/null +++ b/c-crash-course/example6.c @@ -0,0 +1,12 @@ +// C example + +#include +#include + +int main() +{ + int * i = malloc(sizeof(int)); + *i = 5; + printf("%i", *i); + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example7.cpp b/c-crash-course/example7.cpp new file mode 100644 index 0000000..3fb1925 --- /dev/null +++ b/c-crash-course/example7.cpp @@ -0,0 +1,15 @@ +//By default values are passed by value (or copy) +#include + +void f(int i) +{ + i = 4; +} + +int main() +{ + int x = 10; + f(x); + std::cout << x << std::endl; + return 0; +} \ No newline at end of file diff --git a/c-crash-course/example8.cpp b/c-crash-course/example8.cpp new file mode 100644 index 0000000..b8bb615 --- /dev/null +++ b/c-crash-course/example8.cpp @@ -0,0 +1,16 @@ +// However, C and C++ does support passing by reference + +// C++ +#include + +void f(int & x) +{ + x = 4; +} + +int main() +{ + int z = 8; + f(z); + std::cout << z << std::endl; +} \ No newline at end of file diff --git a/c-crash-course/example9.c b/c-crash-course/example9.c new file mode 100644 index 0000000..7fff315 --- /dev/null +++ b/c-crash-course/example9.c @@ -0,0 +1,16 @@ +// C - also works in C++ +#include +#include + +void f(int * x) +{ + *x = 4; // This is dangerous as x could be NULL but for the sake of a simple example - we will assume it won't ever be +} + +int main() +{ + int * i = malloc(sizeof(int)); + f(i); + printf("%i", i); + free(i); +} \ No newline at end of file