Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cython中动态调整大小的对象数组 >如何在 Cython > /P>中执行以下C++代码的等价性? typedef vector<double> dvec; dvec *arr = new dvec[n]; // n is an unsigned int (unknown at compile time) // do something with arr; for example... arr[0].push_back(10); cout << arr[0][0] << endl; typedef向量dvec; dvec*arr=新的dvec[n];//n是无符号整数(编译时未知) //用arr做点什么;例如 arr[0]。推回(10); cout_Python_C++_Cython - Fatal编程技术网

Python Cython中动态调整大小的对象数组 >如何在 Cython > /P>中执行以下C++代码的等价性? typedef vector<double> dvec; dvec *arr = new dvec[n]; // n is an unsigned int (unknown at compile time) // do something with arr; for example... arr[0].push_back(10); cout << arr[0][0] << endl; typedef向量dvec; dvec*arr=新的dvec[n];//n是无符号整数(编译时未知) //用arr做点什么;例如 arr[0]。推回(10); cout

Python Cython中动态调整大小的对象数组 >如何在 Cython > /P>中执行以下C++代码的等价性? typedef vector<double> dvec; dvec *arr = new dvec[n]; // n is an unsigned int (unknown at compile time) // do something with arr; for example... arr[0].push_back(10); cout << arr[0][0] << endl; typedef向量dvec; dvec*arr=新的dvec[n];//n是无符号整数(编译时未知) //用arr做点什么;例如 arr[0]。推回(10); cout,python,c++,cython,Python,C++,Cython,似乎无法在Cython中执行array new(new something[n])。最简单的解决方案是创建一行C++函数来完成数组新的和数组的删除,并调用这些函数。 template <typename T> T* array_new(int n) { return new T[n]; } template <typename T> void array_delete(T* x) { delete [] x; } Cython的C++支持是有限的,而

似乎无法在Cython中执行array new(
new something[n]
)。最简单的解决方案是创建一行C++函数来完成数组新的和数组的删除,并调用这些函数。
template <typename T>
T* array_new(int n) {
    return new T[n];
}

template <typename T>
void array_delete(T* x) {
    delete [] x;
}

Cython的C++支持是有限的,而且在地方很难(并且,如果你必须对C++有很好的理解,无论如何使用它),我认为编写少量C++代码通常是一个合理的解决方案,并且可以节省相当多的时间。尽管如此,有些人似乎想不惜一切代价避免这种情况



我仍然建议使用向量向量(
vector
),因为您可以免费获得内存管理。更好的方法是使用Python类型,使用一个NUMPY数组,但是如果你想与外部C++代码进行接口,这可能不太合适。

< p>在Cython中,你似乎不能做数组new(<代码>新的东西[n] < /代码>)。最简单的解决方案是创建一行C++函数来完成数组新的和数组的删除,并调用这些函数。
template <typename T>
T* array_new(int n) {
    return new T[n];
}

template <typename T>
void array_delete(T* x) {
    delete [] x;
}

Cython的C++支持是有限的,而且在地方很难(并且,如果你必须对C++有很好的理解,无论如何使用它),我认为编写少量C++代码通常是一个合理的解决方案,并且可以节省相当多的时间。尽管如此,有些人似乎想不惜一切代价避免这种情况



我仍然建议使用向量向量(
vector
),因为您可以免费获得内存管理。更好的方法是使用Python类型,使用一个NUMPY数组列表,但是如果你想与外部C++代码接口,那可能不合适。< /P> < P>作为@ DavidW的答案的补充:因为Cython 0.28有一个新的特性允许。它的优点是无缝地使用了这样小的C/C++包装器:

cdef extern from *:
    """
    template <typename T>
    T* array_new(int n) {
        return new T[n];
    }

    template <typename T>
    void array_delete(T* x) {
        delete [] x;
    }
    """
    T* array_new[T](int)
    void array_delete[T](T* x)

from libcpp.vector cimport vector
.... and so on
cdef外部源*:
"""
样板
T*数组_新(整数n){
返回新的T[n];
}
样板
空数组_delete(T*x){
删除[]x;
}
"""
T*数组_新[T](整数)
无效数组_delete[T](T*x)
从libcpp.vector cimport vector
.... 等等

无需创建外部头文件。

作为@DavidW答案的补充:自Cython 0.28以来,有一个新功能允许。它的优点是无缝地使用了这样小的C/C++包装器:

cdef extern from *:
    """
    template <typename T>
    T* array_new(int n) {
        return new T[n];
    }

    template <typename T>
    void array_delete(T* x) {
        delete [] x;
    }
    """
    T* array_new[T](int)
    void array_delete[T](T* x)

from libcpp.vector cimport vector
.... and so on
cdef外部源*:
"""
样板
T*数组_新(整数n){
返回新的T[n];
}
样板
空数组_delete(T*x){
删除[]x;
}
"""
T*数组_新[T](整数)
无效数组_delete[T](T*x)
从libcpp.vector cimport vector
.... 等等

不需要创建外部头文件。

我不明白你在问什么。Placement new类似于
double*d=new(arr[0])double
,您可以在已分配的内存位置中构造一个新的double。你没有在你的代码中这样做,我无法想象它在这个代码中或附近会有什么用途。我正在尝试将这个代码翻译成Cython。我不知道怎么做。我建议结合malloc和placement new作为一种可能性(但我认为Cython中没有新的placement)。矢量的矢量如何?除非你可以用Python类来代替它。@DavidW:+1。是的,我最终放弃了并用vector[vector[double]]实现了它,但我只是好奇这样做是否可行。我不明白你在问什么。Placement new类似于
double*d=new(arr[0])double
,您可以在已分配的内存位置中构造一个新的double。你没有在你的代码中这样做,我无法想象它在这个代码中或附近会有什么用途。我正在尝试将这个代码翻译成Cython。我不知道怎么做。我建议结合malloc和placement new作为一种可能性(但我认为Cython中没有新的placement)。矢量的矢量如何?除非你可以用Python类来代替它。@DavidW:+1。是的,我最终放弃了,并用vector[vector[double]]实现了它,但我只是好奇这样做是否可行。