std::set hello world example

This commit is contained in:
Ciro Santilli 六四事件 法轮功
2020-01-08 00:00:00 +00:00
parent 268355e53b
commit 0cb0c373f6
2 changed files with 42 additions and 1 deletions

View File

@@ -14068,6 +14068,8 @@ Programs under link:userland/cpp/[] are examples of https://en.wikipedia.org/wik
** link:userland/cpp/temporary_directory.cpp[]: illustrates `std::filesystem::temp_directory_path` and answers https://stackoverflow.com/questions/3379956/how-to-create-a-temporary-directory-in-c/58454949#58454949
* random
** link:userland/cpp/random.cpp[]
* containers
** link:userland/cpp/set.cpp[]: `std::set` contains unique keys
[[cpp-multithreading]]
==== C++ multithreading
@@ -18701,7 +18703,7 @@ Notably, global monitor operations on memory accesses of regions marked by <<arm
This is done to allow spinlocks opens to automatically wake up WFE sleeping cores at free time without the need for a explicit SEV.
In the shown in the `wfe_ldrex_strex.cpp` example, which can only terminate in gem5 user mode simulation because due to this event.
In the shown in the `wfe_ldxr_stxr.cpp` example, which can only terminate in gem5 user mode simulation because due to this event.
Note that that program still terminates when running on top of the Linux kernel as explained at: <<wfe-from-userland>>.

39
userland/cpp/set.cpp Normal file
View File

@@ -0,0 +1,39 @@
// https://cirosantilli.com/linux-kernel-module-cheat#cpp
#include <cassert>
#include <set>
int main() {
std::set<int> s{0, 2};
// Insert another element.
auto insert_ret = s.insert(3);
assert(insert_ret.first == s.find(3));
assert(insert_ret.second == true);
// Insert something already there, second of return is false.
insert_ret = s.insert(3);
assert(insert_ret.second == false);
// Check if a value is present.
auto zero = s.find(0);
assert(zero != s.end());
assert(*zero == 0);
// Now for a value that is not present.
auto one = s.find(1);
assert(one == s.end());
#if __cplusplus > 201703L
// In C++20 we finally have a .contains() to avoid the end mess!
assert(s.contains(0));
assert(!s.contains(1));
#endif
// Remove an element.
// Was present, so return 1;
assert(s.erase(0) == 1);
assert(s.find(0) == s.end());
// Not present, return 0.
assert(s.erase(0) == 0);
}