2012-04-01 135 views
3

我必须将元素插入指向矢量的指针。我写了下面的代码,但它给出了段错误。有人可以指出这段代码中有哪些错误,或者我们如何做到这一点。C++指向矢量的指针

int main() 
{ 
    vector<int> *te; 
    te->push_back(10); 
    cout<<te->size()<<endl; 
    return 0; 
} 
+5

为什么你需要一个指向矢量的指针?如果我们知道背后的动机,也许我们可以做得更好。 – 2012-04-01 09:51:55

+0

其实我必须实现一个简单的C++ - 模板类来管理一个智能指针向量vector.Can你可以请教我如何做到这一点? – Mukesh 2012-04-01 09:58:35

+2

为什么你不简单地使用智能指针到矢量呢?即'shared_ptr >'... – enobayram 2012-04-01 10:07:02

回答

16

你永远不分配向量:

vector<int> *te = new vector<int>; 

而且,你也不需要动态分配。一个清洁的方法是使用自动存储:

int main() 
{ 
    vector<int> te; 
    te.push_back(10); 
    cout<<te.size()<<endl; 
    return 0; 
} 
+3

downvote的任何理由? – 2012-04-01 09:55:48

+0

谢谢!其实我必须实现一个简单的C++ - 模板类来管理一个向量的智能指针。请你给我建议如何做到这一点? – Mukesh 2012-04-01 10:05:59

9
vector<int> *te; 
te->push_back(10); 

您已经声明指向一个vector;你还没有初始化它指向一个有效的内存。你需要使用new构建一个新的向量。

vector<int> *te = new vector<int>(); 

但是,您应该不这样做。维持一个指向矢量的指针的原因很少,而且你在管理自己的内部存储器时完全无效。

读一点关于RAII。这是一种用于通过对象的生命周期来管理动态分配的内存的技术。 vector使用此方法在超出范围时清理其内部动态分配的存储。

维护指向矢量的指针会阻止它正常工作,依靠您自己调用delete,从根本上消除了首先在数组上使用vector的一个主要优点。

+0

我们可以创建一个指向'vector'包装类的指针吗? – neckTwi 2013-11-13 06:14:49

+0

@neckTwi:像'unique_ptr '或'shared_ptr '?仍然不明白为什么当矢量非常小时,你会想要一个指向矢量的指针。 – 2013-11-13 07:18:31

+0

我们不应该创建一个'vector'堆对象,或者我们不应该创建一个指向'vector'的指针?我可以创建一个堆栈对象并将其指针传递给其他函数吗?我想要一个指向'vector'的指针,这也是为什么我们需要一个指向任何其他类型的指针的原因。特别是工会支持指针,但不支持引用。 – neckTwi 2013-11-13 10:29:26

0

在开始使用它之前,您必须先为指针分配空间。

vector<int> *te = new vector<int>(); 

插入这行到你的代码刚过vector<int> *te;

注意

如果你是想用指针来访问已定义的载体,你就不必为指针分配的地方。

例如;

vector<int> foo={1,2,3,4,5}; 
vector<int> * te=&foo; 
te->push_back(6); // its legal.