我使用SWIG提供的std_vector.i库来管理python中的c ++向量。我的简化界面文件是:
%include "std_vector.i"
namespace std {
%template(MyClassVector) vector<MyClass_c>;
}
这是换行向量的可用属性:
['back', 'begin', 'capacity', 'clear', 'empty', 'end', 'erase', 'front', 'get_allocator', 'insert', 'iterator', 'pop', 'pop_back', 'push_back', 'rbegin', 'rend', 'reserve', 'resize', 'size', 'this']
如何使用begin属性返回的迭代器来访问第一个元素?例如:
>>>myVector = MyClassVector()
>>>foo1 = MyClass_c()
>>>foo2 = MyClass_c()
>>>foo3 = MyClass_c()
>>>myVector.push_back(foo1)
>>>myVector.push_back(foo2)
>>>myVector.push_back(foo3)
>>>it = myVector.begin()
这是我打印迭代器的可用属性时得到的结果:
['advance', 'copy', 'decr', 'distance', 'equal', 'incr', 'next', 'previous', 'this', 'value']
显然,迭代器不能与&#34; - &gt;&#34;一起使用。就像在C ++中一样。如何正确使用它? 提前谢谢!
答案 0 :(得分:1)
只需使用Python for循环,但这只是一个简单的例子:
%module x
%{
#include <vector>
%}
%include <std_vector.i>
%template(MyVector) std::vector<int>;
示例:
>>> import x
>>> v=x.MyVector([1,2,3,4,5])
>>> v
<x.MyVector; proxy of <Swig Object of type 'std::vector< int > *' at 0x0000000002A7B030> >
>>> v[0]
1
>>> v[1]
2
>>> for i in v: print(i)
...
1
2
3
4
5
>>> i=v.begin()
>>> while i != v.end():
... print(i.next())
...
1
2
3
4
5
所以你可以做到,但Python for
循环更容易。