使用通过swig创建的向量的迭代器

时间:2014-11-30 21:04:56

标签: python swig

我使用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 ++中一样。如何正确使用它? 提前谢谢!

1 个答案:

答案 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循环更容易。