5,332
edits
No edit summary |
|||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
__FORCETOC__ | __FORCETOC__ | ||
C++ is a very popular and powerful language which includes all the low-level features of [[C_(programming_language) | C]] (e.g. pointers, operator overloading) along many high-level features (regex, STL containers) thanks to the C++ standard library.<br> | |||
Some people may think of it as an object-oriented version of C. | |||
==Usage== | ==Usage== | ||
Line 50: | Line 52: | ||
This will allocate an array in the heap.<br> | This will allocate an array in the heap.<br> | ||
[https://shendrick.net/Coding%20Tips/2015/03/15/cpparrayvsvector.html array vs vector] | [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> | 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> | 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> | ||
Line 105: | Line 107: | ||
#include <cerrno> | #include <cerrno> | ||
std::string get_file_contents( | std::string get_file_contents(std::string filename) | ||
{ | { | ||
std::ifstream in(filename, std::ios::in | std::ios::binary); | std::ifstream in(filename, std::ios::in | std::ios::binary); | ||
Line 115: | Line 117: | ||
in.seekg(0, std::ios::beg); | in.seekg(0, std::ios::beg); | ||
in.read(&contents[0], contents.size()); | in.read(&contents[0], contents.size()); | ||
return contents; | |||
return | |||
} | } | ||
throw(errno); | throw(errno); | ||
Line 242: | Line 243: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Containers== | ==STL== | ||
===unordered_set=== | STL is the Standard Template Library.<br> | ||
STL can either refer to the 1994 original STL implementation by Stepanov and Lee from HP or the general set of algorithms, containers, functions, and iterators.<br> | |||
Many STL containers are now built into the standard library (std) of C++.<br> | |||
This section focuses only on the portions of STL which have been incorporated into the C++ standard library. | |||
===Simple Containers=== | |||
====std::pair==== | |||
===Sequences=== | |||
====std::vector==== | |||
====std::list==== | |||
===Container adaptors=== | |||
====std::queue==== | |||
====std::stack==== | |||
===Associative Containers=== | |||
Also known as maps or associative arrays. | |||
====std::unordered_set==== | |||
<code>#include <unordered_set></code><br> | <code>#include <unordered_set></code><br> | ||
This is a hashset.<br> | This is a hashset.<br> | ||
<syntaxhighlight lang="cpp> | <syntaxhighlight lang="cpp> | ||
unordered_set<int> my_set; | std::unordered_set<int> my_set; | ||
// add things to myset | // add things to myset | ||
my_set.insert(5); | my_set.insert(5); | ||
Line 253: | Line 272: | ||
my_set.find(5) != my_set.end(); | my_set.find(5) != my_set.end(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
====std::unordered_map==== | |||
==Boost== | |||
==Programming Styles== | ==Programming Styles== | ||
Line 263: | Line 286: | ||
[https://gist.github.com/bkaradzic/2e39896bc7d8c34e042b Reference]<br> | [https://gist.github.com/bkaradzic/2e39896bc7d8c34e042b Reference]<br> | ||
Somewhat opposite of modern C++.<br> | Somewhat opposite of modern C++.<br> | ||
Basically only use C++ for its classes. Do everything else C-style. | Also known as "C with Classes"<br> | ||
Basically only use C++ for its classes. Do everything else C-style.<br> | |||
The main benefit is compatibility with older compilers/libraries and easier understanding for people less familiar with newer C++ features. | 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 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 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. | * Don't use anything from STL that allocates memory, unless you don't care about memory management. | ||
* Don't use exceptions. | |||
* Don't use RTTI. | |||
== | ==Useful Libraries== | ||
== | A list of useful libraries | ||
===cxxopts=== | |||
[https://github.com/jarro2783/cxxopts Link]<br> | |||
A header-only C++ argument parser.<br> | |||
Note that if you already use Boost, you can use <code>Boost::Program_options</code> instead. | |||
===Eigen=== | |||
{{main | Eigen (C++ library)}} | |||
A C++ linear algebra library. |