classname作为vector的对象和函数push_back的参数

时间:2013-03-26 15:20:03

标签: c++ class vector

我有这个小程序,因为我试图理解向量和作为参数传递的类名。这是程序:

#include<iostream>
#include<vector>
using namespace std;

class objectclass{
public:
    void vec_try(){
        cout<<"print out something";
    }
};

class another{
public:
    void run();
    vector<objectclass *>ports;
    void add_obj(objectclass *p){
        ports.push_back(p);
    }
    };

void another::run(){
    //int j=0;
    ports[j]->vec_try();
}
int main(){
another a;
a.run();
system("pause");
return 0;
}

我知道将vector中的classname作为对象传递是正常的,然后使用push_back在该向量中插入元素但在函数add_obj(objectclass * p)中如果我不想更改,我如何传递值定义功能。我知道这样的方式:

objectclass *p;
p= new objectclass[10]; 

但是我的函数已经定义了,而且我想用ports [i]调用函数vec_try(),所以我没有得到如何传递值以及如何使用ports [i]。我基本上需要澄清一下。

1 个答案:

答案 0 :(得分:1)

您的add_obj函数会指向objectclass个对象。因此,要向向量添加元素,您需要执行以下操作:

another a;

objectclass obj1;  // Create an objectclass
a.add_obj(&obj1);  // Pass its address to add_obj

objectclass obj2;
a.add_obj(&obj2);

objectclass obj3;
a.add_obj(&obj3);

当然,你的向量会保留指向这些对象的指针。当这些对象超出范围并被销毁时,这些指针将指向无效对象。但这并不重要,因为你的对象只在main的末尾被销毁。

另一种方法是动态分配对象:

another a;
a.add_obj(new objectclass());
a.add_obj(new objectclass());
a.add_obj(new objectclass());

每一行动态分配一个objectclass对象,然后将指向该对象的指针传递给add_obj。但是,您需要确保最终以某种方式delete此对象。

push_back进入向量的第一个元素将具有索引0,第二个元素将具有索引1,第三个元素将具有索引2,依此类推。

如果在run中,你想迭代向量中的所有对象,你可以这样做:

for (int i = 0; i < ports.size(); i++) {
  ports[i]->vec_try();
}

如您所见,这会循环遍历向量中的所有元素(从0到ports.size())并在每个元素上调用vec_try

有一种更好的方法可以使用迭代器来完成此操作,但我将把它留给以后的课程。