Quick actions

cmd+k|ctrl+k

Navigation

Languages

Iterator sample

Snippet info

Language

Cpp

Visibility

public

Author

evine

Created

2025-10-07T16:57:59.436219Z

Updated

2025-10-25T10:15:22.676126Z

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <assert.h>
#include <initializer_list>

#include "zip.h"
#include "index_iter.h"
#include "list.h"
#include "linked_list.h"

int main() {
    auto l = List<int>{ 7, 3, 2 };
    
    #if 0
    printf("C Style\n");
    for (size_t i = 0; i < l.count; ++i) {
        auto value = l[i];
        printf("%zu: %i\n", i, value);
    }
    #endif
    
    #if 0
    printf("Iterator in C style loop\n");
    auto iter = l.indexed();
    auto begin = iter.begin();
    auto end = iter.end();
    for (auto it = begin; it != end; ++it) {
        auto [value, i] = *it;
        printf("%zu: %i\n", i, value);
    }
    #endif
    
    #if 0
    printf("C++ Iterator\n");
    for (auto [value, i] : l.indexed()) {
        printf("%zu: %i\n", i, value);
    }
    #endif
    
    #if 0
    printf("C++ Iterator without index\n");
    for (auto value : l) {
        printf("%i\n", value);
    }
    #endif
    
    #if 0
    auto list = Linked_List<int> {934, 482, 349, 832};
    list.reserve(5);
    list.add(91);
    list.add(82);
    list.add_range({123, 421, 999});
    #elif 1
    auto list = Linked_List<int>(2);
    list.add_range({123, 421, 999});
    list.add(91);
    list.add(82);
    list.add(11);
    #else
    auto list = Linked_List<int> {};
    list.add(73);
    list.add(52);
    list.add(98);
    list.add(23);
    list.add(91);
    list.add(82);
    #endif
    
    #if 1
    printf("Linked list\n");
    for (auto value : list) {
        printf("%i\n", value);
    }
    #endif
    
    #if 0
    printf("Linked list with index\n");
    for (auto [value, i] : list.indexed()) {
        printf("%zu: %i\n", i, value);
    }
    #endif
    
    #if 0
    printf("Linked list ptr\n");
    printf("%p\n", &list.first->elements[0]);
    printf("%p\n", &list.first->next->elements[0]);
    for (auto ptr : list.iter_ptr()) {
        printf("%i, %p\n", *ptr, ptr);
    }
    #endif
    
    #if 1
    printf("Linked list ptr with index\n");
    printf("%p\n", &list.first->elements[0]);
    printf("%p\n", &list.first->next->elements[0]);
    for (auto [ptr, index] : list.iter_ptr().indexed()) {
        printf("%zu: %i, %p\n", index, *ptr, ptr);
    }
    #endif
    
    #if 1
    printf("Linked list indexing\n");
    printf("%i\n", list[0]);
    printf("%i\n", list[1]);
    printf("%i\n", list[2]);
    printf("%i\n", list[3]);
    printf("%i\n", list[4]);
    printf("%i\n", list[5]);
    #endif
    
    #if 1
    printf("Zip\n");
    auto list2 = Linked_List<char *> {"a", "b", "c", "d", "e"};
    auto zip_iter = zip2(list, list2);
    for (auto [a, b] : zip_iter) {
        printf("%s: %i\n", b, a);
    }
    #endif
    
    list.release();
    
    return 0;
}
INFO