C ++,对象的向量

时间:2010-03-09 18:56:13

标签: c++ oop vector

在c ++中,使用对象向量是一个好主意吗?如果没有,这个c ++代码出了什么问题?

#include <vector>

using namespace std;

class A {};

int main() {

        vector<A*> v ( new A);
        return 0;
}

来自g ++:

  

13:错误:转换无效   A*' to unsigned int'

4 个答案:

答案 0 :(得分:11)

constructor for std::vector采用初始长度,而不是元素。

这意味着你通常会这样做:

vector<A*> v(1); // Initialize to length 1
v.push_back( new A() ); // Add your element...

您收到编译错误,因为在您的系统上,size_type被定义为unsigned int。它试图使用那个构造函数,但是失败了,因为你传递了一个指向A的指针。

答案 1 :(得分:4)

在使用您不知道的内容之前,您需要阅读documentation

以下是std::vector类的不同构造函数:

explicit vector ( const Allocator& = Allocator() );
explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
template <class InputIterator>
         vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
vector ( const vector<T,Allocator>& x );

答案 2 :(得分:2)

Vector没有一个构建器可以存储一个项目。

使用给定值制作一个项目的向量:

vector<A*> v ( 1, new A);

关于动态分配对象的指针向量是否是个好主意 - 没有。您必须手动管理该内存。

按值存储对象要好得多,或者必须 - 使用智能指针自动管理内存(例如std :: tr1 :: shared_ptr)。

答案 3 :(得分:1)

我建议不要像这样使用std::vector:内存管理成为一场噩梦。 (例如,vector<A*> v ( 10, new A);有十个指针,但只有一个已分配的对象,你必须记住只释放一次。如果你根本没有解除分配,你就有了不同意的记忆。)

相反,请考虑使用Boost Pointer Container library:您可以传入新分配的对象,它将为您处理所有内存管理。