Jump to content

C++: Difference between revisions

1,503 bytes added ,  8 January 2020
(7 intermediate revisions by the same user not shown)
Line 46: Line 46:
* <code>dynamic_cast</code>
* <code>dynamic_cast</code>
If you're casting between things but do not want to change the bit-pattern (e.g. binary data or pointers), you can also use <code>reinterpret_cast</code>.
If you're casting between things but do not want to change the bit-pattern (e.g. binary data or pointers), you can also use <code>reinterpret_cast</code>.
===Array===
<code>#include <array></code><br>
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]<br>
If you need a static sized array, you can use <code>std::array</code> in the <code>array</code> header.<br>
This wrapper around C-style arrays gives us size information and allows the array to be passed around by reference while keeping the array on the stack unlike <code>std::vector</code>.<br>
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>


===String===
===String===
Line 94: Line 81:
}
}
</syntaxhighlight>
</syntaxhighlight>
====Buildings Strings====
[https://www.fluentcpp.com/2017/12/19/build-strings-from-plain-string-up-to-boost-karma/ The Complete Guide to Building Strings In C++]<br>
There are multiple ways of buildings strings in C++.<br>
Strings are mutable in C++.<br>
I typically use <code>+</code> or <code>ostringstream</code> to build strings.


===Filesystem===
===Filesystem===
Line 279: Line 272:


===Sequences===
===Sequences===
====std::array====
<code>#include <array></code><br>
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]<br>
If you need a static sized array, you can use <code>std::array</code> in the <code>array</code> header.<br>
This wrapper around C-style arrays gives us size information and allows the array to be passed around by reference while keeping the array on the stack unlike <code>std::vector</code>.<br>
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>
====std::vector====
====std::vector====
[https://en.cppreference.com/w/cpp/container/vector Reference]<br>
Use vector for almost everything...<br>
It is an ArrayList.<br>
Note that <code>vector<bool></code> is not an array of bools.<br>
This has several nuances so you should use <code>vector<char></code> instead.<br>
<syntaxhighlight lang="c++">
// Basics
vector my_vec;
// Vector with size 5
vector my_vec(5);
// Vector with size 5 initialized to 1
vector my_vec(5, 1);
// Length of vector
my_vec.size();
// Equivalent to size()==0
my_vec.empty();
// Equivalent to my_vec[0];
// Undefined on empty vectors
my_vec.front();
// Equivalent to my_vec[my_vec.size()-1];
// Undefined on empty vectors
my_vec.back();
</syntaxhighlight>
====std::deque====
Double-ended queue
====std::list====
====std::list====


===Container adaptors===
===Container adaptors===
====std::queue====
====std::queue====
[https://en.cppreference.com/w/cpp/container/queue Reference]<br>
<syntaxhighlight lang="c++">
</syntaxhighlight>
====std::stack====
====std::stack====
[https://en.cppreference.com/w/cpp/container/stack cppreference]
[https://en.cppreference.com/w/cpp/container/stack cppreference]
Line 317: Line 360:
</syntaxhighlight>
</syntaxhighlight>
====std::unordered_map====
====std::unordered_map====
;Custom Keys
How to use a rational number as a key in C++
<syntaxhighlight lang="C++">
struct Fraction
{
    int num;
    int den;
    bool operator==(const Fraction &other) const {
        return num*other.den == den * other.num;
    }
    Fraction(int a, int b) : num(a), den(b) {}
};
</syntaxhighlight>


==Boost==
==Boost==