c++ - 是否可以创建指针 vector ?

标签 c++ stl pointers vector pure-virtual

只是想知道,由于我遇到了一个问题,是否可以创建一个指针 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/

相关文章:

c++ - boost 和 Curl 不能一起工作

c++ - STL算法处理符合条件的前N个元素

c++ - 链表内存管理

c - 等式 "*x_ptr = &x "中每个变量的伪代码翻译是什么?

c - C 中函数参数作为指针和返回值

c++ - 在 C++ 中使用 BLAS 对来自不同数组的值进行点积

c++ - 如何正确移植 Wine-only 函数 GetMulti ByteString?

c++ - 为什么 C++ 容器不实现删除(reverse_iterator position)?

c++ - 如何用C/C++高效的合成Bayer Raw10数据?

c++ - 在类成员函数中声明和定义函数对象