Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 是否用SWIG覆盖字符(或std::字符串)数组位置?_Python_Arrays_Numpy_Char_Swig - Fatal编程技术网

Python 是否用SWIG覆盖字符(或std::字符串)数组位置?

Python 是否用SWIG覆盖字符(或std::字符串)数组位置?,python,arrays,numpy,char,swig,Python,Arrays,Numpy,Char,Swig,我能够用C/C++编写一个void函数,并使用SWIG(int*INPLACE\u ARRAY1,int DIM1)包装到Python/Numpy,该函数接收一个int*vector作为参数,对该向量进行一些计算,并覆盖同一向量上的结果,该结果在Python对象内部可用。具体如下: extern "C" void soma_aloc(int* vetor, int tamanho) { int m = 0; int* ponteiro = new in

我能够用C/C++编写一个void函数,并使用SWIG
(int*INPLACE\u ARRAY1,int DIM1)
包装到Python/Numpy,该函数接收一个
int*vector
作为参数,对该向量进行一些计算,并覆盖同一向量上的结果,该结果在Python对象内部可用。具体如下:

    extern "C" void soma_aloc(int* vetor, int tamanho)
    {
       int m = 0;
       int* ponteiro = new int[tamanho];

       for(m = 0; m < tamanho; m++)
       {           
          ponteiro[m] = vetor[m];
       };

       for(m = 0; m < tamanho; m++)
       {
          ponteiro[m] = ponteiro[m] * 10;
       };

       for(m = 0; m < tamanho; m++)
       {
          vetor[m] = ponteiro[m];
       };

       delete [] ponteiro; 
       };
我几乎没有游泳的经验。可以使用
char*
char**
和/或
std::string*/std::string**
?提前谢谢

使用标准::向量:

void vetor_char2D(std::vector<std::string>& vetorchar)
{
   for (int i = 0; i < vetorchar.size(); i++)
       vetorchar[i] = "b";
};
void vetor_char2D(标准::vector&vetorchar)
{
对于(int i=0;i
这清楚地表明向量可以修改,其中的字符串可以修改,STL向量和字符串的SWIG类型映射将很好地工作。注意字符串的双引号而不是单引号;Python只有字符串,没有字符,所以这无关紧要。你也可以让它与char*等一起工作,但它很少值得付出努力,更容易使用。如果不想更改源代码,可以通过%inline指令将上述内容作为包装器包含在.i文件中


注意,您不需要外部C限定符。你应该使用
#include
而不是string.h.

谢谢你,伙计!现在它开始工作了!我正在与此模板一起使用。I文件:%template(IntVector)std::vector;%模板(双向量)std::vector;%模板(StringVector)std::vector;%模板(ConstCharVector)std::vector;在Python内部,我使用(模块名称).StringVector(长度)构建适当的对象。问题:我需要在Python中释放这些向量吗?@eldiegon不,你不需要,因为swig复制两层之间的字符串,没有mem需要管理。@eldiegon很棒。请注意,感谢他人的方法是投票选出您认为有用的答案和评论,并标记最有用/正确/有用的答案(选中标记)。
void vetor_char2D(std::vector<std::string>& vetorchar)
{
   for (int i = 0; i < vetorchar.size(); i++)
       vetorchar[i] = "b";
};