1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include <stdio.h>
void int_del(int* x) {
printf("del: %d\n", *x);
}
#define i_val int
#define i_valdel int_del // optional func to show elements destroyed
#include <stc/csptr.h> // define csptr_int shared pointers
#define i_key_csptr int // refer to csptr_int definition above
#include <stc/csset.h> // define a sorted set of csptr_int
#define i_val_csptr int
#include <stc/cvec.h>
int main()
{
c_forauto (cvec_int, vec) // declare and init vec, call del at scope exit
c_forauto (csset_int, set) // declare and init set, call del at scope exit
{
cvec_int_push_back(&vec, csptr_int_make(2021));
cvec_int_push_back(&vec, csptr_int_make(2012));
cvec_int_push_back(&vec, csptr_int_make(2022));
cvec_int_push_back(&vec, csptr_int_make(2015));
printf("vec:");
c_foreach (i, cvec_int, vec) printf(" %d", *i.ref->get);
puts("");
// add odd numbers from vec to set
c_foreach (i, cvec_int, vec)
if (*i.ref->get & 1)
csset_int_emplace(&set, *i.ref); // copy shared pointer => increments counter.
// erase the two last elements in vec
cvec_int_pop_back(&vec);
cvec_int_pop_back(&vec);
printf("vec:");
c_foreach (i, cvec_int, vec) printf(" %d", *i.ref->get);
printf("\nset:");
c_foreach (i, csset_int, set) printf(" %d", *i.ref->get);
puts("\nDone");
}
}
/* output:
vec: 2021 2012 2022 2015
del: 2022
vec: 2021 2012
set: 2015 2021
Done
del: 2015
del: 2021
del: 2012
*/
|