如何同时处理C ++类的多个成员?

时间:2011-07-26 16:26:17

标签: c++ python class

我已经习惯了Python,并努力学习一些C ++。在Python中,当我有一个带有“移动”功能的类时,我可以简单地将其成员添加到列表中并像这样遍历列表:

for i in list:
    i.move(n)

现在,在C ++中如何方便地完成相应的操作?

4 个答案:

答案 0 :(得分:6)

您可以使用指针或对象引用在C ++中执行相同的操作。

如果您的班级是MyClass,您可以声明:

std::vector<MyClass*> list;

然后将您的对象添加到列表中:

list.push_back(&objectOfMyClass); //-- for all of your objects

最后:

std::vector<MyClass*>::iterator itr;
for (itr = list.begin(); itr != list.end(); ++itr) {
   (*itr)->myMethod(...);
}

我使用std::vector来简化分配对象(它会自动增长)并得到一个迭代器,你应该知道它,但你可以通过使用普通数组来做同样的事情,如果你愿意的话

答案 1 :(得分:1)

你可以使用boost foreach

获得类似python的语法

由于您可能想要使用虚函数,这意味着您的容器中将包含不同类型的对象。这意味着你需要一个指针容器,所以我们再次提升boost :: ptr_vector(ptr_list以相同的方式工作)。

然后我们可以得到一个这样的简单应用程序:

#include <boost/foreach.hpp>
#include <boost/ptr_container/ptr_vector.hpp>

#define   foreach   BOOST_FOREACH

class MyBase {public: virtual ~MyBase() {} virtual void move(int x) = 0;}

int main()
{
    boost::ptr_vector<MyBase>    data  /*= fillData()*/;

    foreach(MyBase& i, data)
    {
         i.move(4);
    }  
}

答案 2 :(得分:0)

//create a vector of int's (basically a container, like an array)
vector<int> v;
//insert item into vector    
v.push_back(12);

//create an iterator that points to the first item in the vector    
vector<int>::iterator iter = v.begin();


// move through the vector from begin() to end(), printing each item to console.    
for (; iter != v.end(); iter++)
{
    std::cout << *iter;
}

答案 3 :(得分:0)

尝试

list<myobj>::iterator Iterator;
for(Iterator = mydata.begin(); Iterator != mydata.end(); Iterator++)
 {
  (*Iterator).move(n);
 }