只是想知道,由于我遇到了一个问题,是否可以创建一个指针 vector ?如果是这样,怎么办?特别是关于使用迭代器和 .begin() ,即:我如何将这个 vector 变成指针 vector :
class c
{
void virtual func();
};
class sc:public c
{
void func(){cout<<"using func";}
};
sc cobj;
vector<c>cvect
cvect.push_back(cobj);
vector<c>::iterator citer
for(citer=cvect.begin();citer<cvect.end();citer++)
{
citer->func();
}
最佳答案
当然可以。
vector<c*> cvect;
cvect.push_back(new sc);
vector<c*>::iterator citer;
for(citer=cvect.begin(); citer != cvect.end(); citer++) {
(*citer)->func();
}
注意事项:
如果您像我在我的示例中那样使用动态分配的内存,则需要自行清理
例如:
for(...) { delete *i; }
这可以通过使用 shared_ptr
的 vector 来简化s(如 boost::shared_ptr
)。不要尝试使用 std::auto_ptr
为此,它不会工作(甚至不会编译)。
另一件事要记住,你应该避免使用 <
在可能的情况下比较循环中的迭代器,它只适用于模拟随机访问迭代器的迭代器,这意味着您不能更改代码以使用例如一个std::list
.
关于c++ - 是否可以创建指针 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817263/