我已经习惯了Python,并努力学习一些C ++。在Python中,当我有一个带有“移动”功能的类时,我可以简单地将其成员添加到列表中并像这样遍历列表:
for i in list:
i.move(n)
现在,在C ++中如何方便地完成相应的操作?
答案 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);
}