C++: Difference between revisions
No edit summary |
|||
Line 11: | Line 11: | ||
* <code>-std=c++17</code> for C++17 support | * <code>-std=c++17</code> for C++17 support | ||
* <code>-O3</code> for level 3 optmizations | * <code>-O3</code> for level 3 optmizations | ||
===Arrays=== | |||
In C++, you can use <code>std::vector</code> which gives you a resizable array. | |||
This will allocate an array in the heap.<br> | |||
[https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html array vs vector] | |||
If you need a static sized array, you can use <code>std::array</code>.<br> | |||
This wrapper around C-style arrays gives us size information and allows the array to be passed around while keeping the array on the stack unlike <code>std::vector</code> | |||
If you want to allocate a static array on the heap, you can do so as follows: | |||
<syntaxhighlight lang="C++"> | |||
auto my_arr = std::make_shared<std::array<char,64>>(); | |||
</syntaxhighlight> | |||
===Strings=== | ===Strings=== | ||
====String Interpolation==== | ====String Interpolation==== | ||
Line 72: | Line 83: | ||
====Smart Pointers==== | ====Smart Pointers==== | ||
[https://www.geeksforgeeks.org/auto_ptr-unique_ptr-shared_ptr-weak_ptr-2/ Smart Pointers]<br> | [https://www.geeksforgeeks.org/auto_ptr-unique_ptr-shared_ptr-weak_ptr-2/ Smart Pointers]<br> | ||
There are 4 types of smart pointers | Smart pointers were added in C++11.<br> | ||
There are 4 types of smart pointers: | |||
* <code>auto_ptr</code> which is [https://stackoverflow.com/questions/3697686/why-is-auto-ptr-being-deprecated deprecated] | * <code>auto_ptr</code> which is [https://stackoverflow.com/questions/3697686/why-is-auto-ptr-being-deprecated deprecated] | ||
* <code>unique_ptr</code> | * <code>unique_ptr</code> | ||
Line 82: | Line 94: | ||
====Garbage Collection==== | ====Garbage Collection==== | ||
Starting from C++ | Starting from C++11, you should use smart pointers such as [https://en.cppreference.com/w/cpp/memory/shared_ptr <code>shared_ptr</code>] which have automatic garbage collection.<br> | ||
<br> | <br> | ||
Traditional C++ does not have garbage collection.<br> | Traditional C++ does not have garbage collection.<br> |
Revision as of 16:50, 7 October 2019
Usage
How to do things using the C++ standard library (stdlib).
Compilation
g++
g++ my_driver.c [-Iincludefolder] -o my_program.out
Misc optimizations
-std=c++17
for C++17 support-O3
for level 3 optmizations
Arrays
In C++, you can use std::vector
which gives you a resizable array.
This will allocate an array in the heap.
array vs vector
If you need a static sized array, you can use std::array
.
This wrapper around C-style arrays gives us size information and allows the array to be passed around while keeping the array on the stack unlike std::vector
If you want to allocate a static array on the heap, you can do so as follows:
auto my_arr = std::make_shared<std::array<char,64>>();
Strings
String Interpolation
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string a = "a", b = "b", c = "c";
// apply formatting
std::stringstream s;
s << a << " " << b << " > " << c;
// assign to std::string
std::string str = s.str();
std::cout << str << "\n";
}
Filesystem
Reading and Writing
Reading and writing is done using fstream
.
If you don't need r/w, use istream
for reading or ostream
for writing.
#include <iostream>
#include <fstream>
int main() {
std::istream my_file("my_file.txt");
std::string line;
# Read line by line
# You can also read using <<
while (getline(my_file, line)) {
std::cout << line << std::endl;
}
return 0;
}
Regular Expressions
Threading
Sleep
std::this_thread::sleep_for(std::chrono::milliseconds(1));
Memory
Smart Pointers
Smart Pointers
Smart pointers were added in C++11.
There are 4 types of smart pointers:
auto_ptr
which is deprecatedunique_ptr
shared_ptr
weak_ptr
Use unique_ptr
for ownership models.
Use shared_ptr
when multiple objects need to reference the same thing.
Use weak_ptr
to avoid cyclic dependencies which cause issues with reference counting.
Garbage Collection
Starting from C++11, you should use smart pointers such as shared_ptr
which have automatic garbage collection.
Traditional C++ does not have garbage collection.
After using new
to allocate an object, use delete
to deallocate it.
You can also use C allocation with malloc
, calloc
, alloca
, and free
, though it is not recommended since these are not type-safe.
Casting
Types of casts C++ has several types of casts. These are the main ones you should use.
static_cast
dynamic_cast
Programming Styles
Modern C++
List of resources
Prefer newer std functions available in C++17.
Use shared pointers instead of new and delete.
- Use clang-format.
Orthodox C++
Reference
Somewhat opposite of modern C++.
Basically only use C++ for its classes. Do everything else C-style.
The main benefit is compatibility with older compilers/libraries and easier understanding for people less familiar with newer C++ features.
- Don't use C++ runtime wrapper for C runtime includes (<cstdio>, <cmath>, etc.), use C runtime instead (<stdio.h>, <math.h>, etc.)
- Don't use stream (<iostream>, <stringstream>, etc.), use printf style functions instead.
- Don't use anything from STL that allocates memory, unless you don't care about memory management.