矢量在Cython中分配

use*_*996 6 python pointers vector cython

这是我的cython程序

cdef struct Node:
    int v
    Node* next
    Node* pre

def f(int N):
    cdef:
        vector[Node*] narray
        int i
    narray.assign(N, 0)
    for i in xrange(N):
        narray[i] = 0
Run Code Online (Sandbox Code Playgroud)

Cython编译结果:

Error compiling Cython file:
------------------------------------------------------------
...
    cdef:
        vector[Node*] narray
        int i
    narray.assign(N, 0)
    for i in xrange(N):
        narray[i] = 0
             ^
------------------------------------------------------------

testLinkList.pyx:107:14: Compiler crash in AnalyseExpressionsTransform
Run Code Online (Sandbox Code Playgroud)

但我可以使用push_back()在向量的末尾追加值或使用int而不是Node*.怎么了?

lot*_*rio 2

您使用什么版本的 Cython?版本 0.20.1 适用于我,代码如下:

# distutils: language=c++

from libcpp.vector cimport vector

cdef struct Node:
    int v
    Node* next
    Node* pre

def f(int N):
    cdef:
        vector[Node*] narray
        int i
    narray.assign(N, NULL)
    for i in range(N):
        narray[i] = NULL
Run Code Online (Sandbox Code Playgroud)

并使用这个setup.py文件:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize("test_vector.pyx"))
Run Code Online (Sandbox Code Playgroud)