簡體   English   中英

Python中的SWIG C ++矢量訪問

[英]SWIG c++ vector access in python

這可能是一個菜鳥問題,但這是正確的。 我已經使用SWIG將3d向量包裝到python模塊中。 一切都已編譯,我可以導入模塊並對其執行操作。 我似乎無法弄清楚如何在python中訪問矢量來存儲和更改其中的值。 如何在python中存儲和更改矢量值。 我的代碼在下面,用於測試算法stl是否與SWIG配合使用。 它似乎確實有效,但是我需要能夠使用python將值放入向量中。

頭文件

 #ifndef HEADER_H_INCLUDED

 #define HEADER_H_INCLUDED

 #include <vector>

 using namespace std;

 struct myStruct{

 int vecd1, vecd2, vecd3;

 vector<vector<vector<double> > >vec3d;

 void vecSizer();
 void deleteDuplicates();
 double vecSize();
 void run();
 };

 #endif // HEADER_H_INCLUDED

main.cpp

 #include "header.h"
 #include <vector>
 #include <algorithm>

 void myStruct::vecSizer()
 {
     vec3d.resize(vecd1);

     for(int i = 0; i < vec3d.size(); i++)
     {
         vec3d[i].resize(vecd2);

         for(int j = 0; j < vec3d[i].size(); j++)
         {
             vec3d[i][j].resize(vecd3);
         }
     }
 }

 void myStruct::deleteDuplicates()
 {
     vector<vector<vector<double> > >::iterator it;
     sort(vec3d.begin(),vec3d.end());
     it = unique(vec3d.begin(),vec3d.end());
     vec3d.resize(distance(vec3d.begin(), it));
 }

 double myStruct::vecSize()
 {
     return vec3d.size();
 }

 void myStruct::run()
 {
     vecSizer();
     deleteDuplicates();
     vecSize();
 }

從終端(Ubuntu)

 import test #import the SWIG generated module
 x = test.myStruct() #create an instance of myStruct
 x.vecSize() #run vecSize() should be 0 since vector dimensions are not initialized
 0.0 
 x.vec3d #see if vec3d exists and is of the correct type
 <Swig Object of type 'vector< vector< vector< double > > > *' at       0x7fe6a483c8d0>

提前致謝!

事實證明,在生成包裝器/接口時,矢量會轉換為不可變的python對象。 簡而言之,您不能從python修改包裝的c ++向量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM