Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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
std::vector to boost::python::list不复制数据_Python_C++_Boost Python - Fatal编程技术网

std::vector to boost::python::list不复制数据

std::vector to boost::python::list不复制数据,python,c++,boost-python,Python,C++,Boost Python,我的问题基本上和你的一样。不同之处在于,我只需要从Python端读取C++数据。p> ,我可以构建一个新的C++类,它保存一个指针并转发所有必需的属性,然后将这个新类暴露给Python。有没有更好的示例或系统方法来获取python“list”而不是真正的list,因为如果不复制底层数据,setter是不允许的 如果您不想将std::vector转换为boost::python::list。然后,如果您将vector的大小传递给python端,并使用参数作为索引迭代该函数,以获得vector到py

我的问题基本上和你的一样。不同之处在于,我只需要从Python端读取C++数据。p>
,我可以构建一个新的C++类,它保存一个指针并转发所有必需的属性,然后将这个新类暴露给Python。有没有更好的示例或系统方法来获取python“list”而不是真正的list,因为如果不复制底层数据,setter是不允许的

如果您不想将std::vector转换为boost::python::list。然后,如果您将vector的大小传递给python端,并使用参数作为索引迭代该函数,以获得vector到python端的元素,这是可能的

在cpp中:

class vc
{
    private:
        vector <int> vec ;
    public: 
        vc(){};
        void set_vector();
        int vector_size();
        int vector_iterator(int index);
        ~vc(){};
}

void vc::set_vector()
{
    for(int i=0;i<10;i++)
        this->vec.push_back(i);
}

int vc::vector_size()
{   
    return this->vec.size();
}

int vc::vector_iterator(int index)
{   
    if(this->vec.size()> index)
        return  this->vec[index];
    return 0;
}

BOOST_PYTHON_MODULE(vector_imp)  
{  
    class_<vc>("vc", init<>())
        .def("set_vector",&vc::set_vector)
        .def("vector_size",&vc::vector_size)  
        .def("vector_iterator",&vc::vector_iterator)
    ;  
}
import vector_imp as vect
    vc_obj = vect.vc()
    vc_obj.set_vector()
    v_size = vc_obj.vector_size()
    for i in range(0,v_size):
        element = vc_obj.vector_iterator(i)
        print element