# Class Introduction and STL Essentials
## Class Introduction
Problem: C arrays are hard to manage and error prone
Solution: Implement a `List` class in C++
Concepts:
* constructor/destructor
* new/delete syntax
* member/method
* getter/setter
* resource management
* lifetimes and scopes
Limitations:
* No templates so `int` only
* No dynamic resizing
* No operator overloading
* No copy/move discussion
* No `std::initializer_list` so set elements one by one
## STL Essentials
Problem: Above mentioned limitations
Solution: Use `std::vector<T>`
Common STL tools:
* `std::cout` (C++ stream)
* `std::string`
* `std::vector`
* `std::shared_ptr`,`std::unique_ptr`
## How C/C++ Works
* `.hpp`/`.cpp` files
* definition/declaration
* include guards
* preprocessors(`#include`, `#ifdef`, `#define`)
## Encountered Problems
* Copy constructor