cython

Форк
0
/
cpp_stl.pyx 
76 строк · 1.5 Кб
1
# mode: run
2
# tag: cpp, werror
3

4
cdef extern from "vector" namespace "std":
5

6
    cdef cppclass vector[T]:
7

8
        T at(int)
9
        void push_back(T t)
10
        void assign(int, T)
11
        void clear()
12
        int size()
13

14
        cppclass iterator:
15
            T operator*()
16
            iterator operator++()
17
            bint operator==(iterator)
18
            bint operator!=(iterator)
19

20
        iterator end()
21
        iterator begin()
22

23
from cython.operator cimport dereference as deref, preincrement as inc
24

25
def test_vector(L):
26
    """
27
    >>> test_vector([1,10,100])
28
    1
29
    10
30
    100
31
    """
32
    v = new vector[int]()
33
    for a in L:
34
        v.push_back(a)
35
    cdef int i
36
    for i in range(len(L)):
37
        print v.at(i)
38
    del v
39

40
ctypedef int my_int
41
def test_vector_typedef(L):
42
    """
43
    >>> test_vector_typedef([1, 2, 3])
44
    [1, 2, 3]
45
    """
46
    cdef vector[my_int] v = L
47
    cdef vector[int] vv = v
48
    return vv
49

50
def test_vector_iterator(L):
51
    """
52
    >>> test_vector([11, 37, 389, 5077])
53
    11
54
    37
55
    389
56
    5077
57
    """
58
    v = new vector[int]()
59
    for a in L:
60
        v.push_back(a)
61
    cdef vector[int].iterator iter = v.begin()
62
    while iter != v.end():
63
        print deref(iter)
64
        inc(iter)
65
    del v
66

67
cdef class VectorWrapper:
68
    """
69
    >>> VectorWrapper(1, .5, .25, .125)
70
    [1.0, 0.5, 0.25, 0.125]
71
    """
72
    cdef vector[double] vector
73
    def __init__(self, *args):
74
        self.vector = args
75
    def __repr__(self):
76
        return repr(self.vector)
77

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.